c++ cout为什么会出现这种情况?

我在代码中加了如下的日志:

std::cout << "entries size:" << entries.size() << std::endl;
std::cout << "append 200, size:" << once_encode_buf.size() << std::endl;
std::cout << "append " << once_encode_count << ", size:" << once_encode_buf.size() << std::endl;

但是我很奇怪实际输出的时候日志会混到一起,结果类似于:
image.png
红框里面有的size没输出,有的则是没有换行。。
为什么会出现类似的情况呢?求C++大佬给解惑

阅读 5.7k
4 个回答

std::cout << "entries size:" << entries.size() << std::endl;
在这里等价于
std::cout << "entries size:";
std::cout << entries.size();
std::cout << std::endl;

std::cout多次调用<<依然会产生交错。你用sstream或者其他方法把流变成一个完整的字符串,再输出就好了。另外用std::cout在多线程环境下输出日志记得及时std::flush

多线程?
不加锁多个线程的数据会混在一起的 ....

多线程cout需要加锁保证数据同步输出。
你可以找一些c++日志库,一般都会提供线程安全的日志记录功能。

cout线程不安全,C++11的cout线程安全,boost的mcout线程安全,可以使用-std=c++11编译选项试试,注意,需要编译器支持!gcc4.8以上。

推荐问题