除非遇到换行符,否则c ++不会写入控制台

时间:2012-08-27 02:33:18

标签: c++ constructor newline stdout

我最近写了一个涉及套接字的简单c ++程序。自从我使用c ++以来已经有一段时间了,所以我正在做一些简单的健全性检查,以确保我的类正确构建。那时我遇到了一个非常奇怪的错误。当我在输出结束时没有\nendl到控制台时,它不会写入控制台。例如:

这不会输出到控制台

class Server{
    public:
        Server(){
            std::cout << "STARTING SERVER";
        }
};

这会:

class Server{
    public:
        Server(){
            std::cout << "STARTING SERVER" << std::endl;
        }
};

两者都是使用Server server;创建的。这只是我电脑里的“幽灵”还是以前有人遇到过这个?

1 个答案:

答案 0 :(得分:8)

这是正常的。它存储在缓冲区中,直到刷新缓冲区。您可以将std::flush发送到流以进行刷新。您可以使用std::endl写入行尾并刷新缓冲区。如果你在流中写了很多小东西,它基本上是一种避免大量I / O操作的优化。