std :: cout将不会打印

std::cout << "hello"不起作用时,是否有任何情况? 我有ac / c + +代码,但std::cout不打印任何东西,甚至不是常量string(如“你好”)。

有没有办法检查cout是否能够打开stream? 有一些成员函数,如good()bad() ,…但我不知道哪一个适合我。

确保你刷新了stream。 这是必需的,因为输出stream是缓冲的,你不能保证缓冲区何时被刷新,除非你自己手动刷新它。

 std::cout << "Hello" << std::endl; 

std::endl将输出一个换行符并刷新stream。 或者, std::flush 只会执行flush操作。 刷新也可以使用stream的成员函数完成:

 std::cout.flush(); 

std::cout很可能是因为缓冲(你正在写的东西在std::cout的缓冲区中而不是在输出中)。

你可以做这些事情之一:

  • 直接刷新std::cout

     std::cout << "test" << std::flush; // std::flush is in <iostream> 
     std::cout << "test"; std::cout.flush(); // explicitly flush here 
     std::cout << "test" << std::endl; // endl sends newline char(s) and then flushes 
  • 改用std::cerrstd::cerr没有被缓冲,但它使用了不同的stream(即如果你对“在控制台上看到消息”感兴趣的话,第二种解决scheme可能不适合你)。

要有效地禁用缓冲,你可以调用这个:

 std::setvbuf(stdout, NULL, _IONBF, 0); 

或者,您可以调用您的程序并在命令行中禁用输出缓冲:

 stdbuf -o 0 ./yourprogram --yourargs 

请记住,这通常不是出于性能原因。