【问题标题】:cout not working in the case of an infinite loopcout 在无限循环的情况下不起作用
【发布时间】:2015-09-18 12:54:53
【问题描述】:
int main(int argc, char* argv[]) 
{
    while(1)
    {
        cout<<"123";
    }
    return 0;
}

我写了这个小程序,它会打印“123”,然后进入一个无限循环。但它不会在屏幕上打印任何内容。这是什么原因?

【问题讨论】:

  • 可能没有刷新,试试std::cout&lt;&lt;"123"&lt;&lt;std::endl;
  • cout &lt;&lt; "123"; 不需要在屏幕上打印任何内容,正如 Melkon 指出的那样,在打印任何内容之前必须刷新流
  • -5?过分严厉? &lt;&lt; 正在缓冲真的很明显吗?然后是 UB 刺痛。这个问题还不错。 OP 甚至得到了正确的 main 原型。
  • 可能是因为它不是 MCVE。对于初学者的问题,人们永远不知道代码是否不打印,例如,它甚至没有编译。

标签: c++ infinite-loop


【解决方案1】:

可能有两个原因。

首先,输出很可能是缓冲的。也就是说,发送到cout 的文本不会立即打印,而是保存在缓冲区中并且仅在刷新缓冲区时打印(这发生在cout.flush() 或通过打印endl)。

其次,我假设一个空的无限循环is undefined behavior。也就是说,一个无限循环的程序实际上可以做任何事情。特别是,优化器可以优化程序之外的任何内容。

【讨论】:

  • 我可能错了,但我不相信无限循环是UB
  • 是(加一),但有一些附带条件。
  • @tobi303,添加了参考
  • 这取决于无限循环的作用。我假设您的意思是“空的无限循环”。
【解决方案2】:

很可能进程 CPU 烧毁(由于紧密的循环)阻止了流向控制台的流。

从技术上讲,虽然您的程序的行为是未定义的,但本质上,循环没有任何输入/输出或副作用。

允许编译器优化你的函数体,这也不会产生任何输出。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-05-30
    • 2014-03-08
    • 1970-01-01
    • 2014-07-13
    • 1970-01-01
    • 2014-12-09
    • 2017-10-30
    相关资源
    最近更新 更多