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

c++ not writing to console unless a newline was encountered

本文关键字:控制台 c++ 否则 遇到 换行符      更新时间:2023-10-16

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

这不会输出到控制台

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

这将:

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

两者都是使用Server server;创建的。这只是我电脑里的一个"幽灵"吗?或者以前有人遇到过这种情况吗?

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