我最近写了一个涉及套接字的简单c ++程序。自从我使用c ++以来已经有一段时间了,所以我正在做一些简单的健全性检查,以确保我的类正确构建。那时我遇到了一个非常奇怪的错误。当我在输出结束时没有\n
或endl
到控制台时,它不会写入控制台。例如:
这不会输出到控制台
class Server{
public:
Server(){
std::cout << "STARTING SERVER";
}
};
这会:
class Server{
public:
Server(){
std::cout << "STARTING SERVER" << std::endl;
}
};
两者都是使用Server server;
创建的。这只是我电脑里的“幽灵”还是以前有人遇到过这个?
答案 0 :(得分:8)
这是正常的。它存储在缓冲区中,直到刷新缓冲区。您可以将std::flush
发送到流以进行刷新。您可以使用std::endl
写入行尾并刷新缓冲区。如果你在流中写了很多小东西,它基本上是一种避免大量I / O操作的优化。