【问题标题】:seeking clarity regarding std::cout and std::endl寻求关于 std::cout 和 std::endl 的澄清
【发布时间】:2021-08-04 17:05:12
【问题描述】:

我试图更好地了解当我们在std::cout 之后不使用std::endlbuffer 会发生什么。

让我们考虑以下一段 C++ 代码 -

int main(int argc, char** argv) {

    std::cout << "Hello World!";
    return 0;
}   

据我了解,std::cout 会将字符串 Hello World! 添加到 buffer。如果我们不在代码末尾添加 std::endl - std::cout &lt;&lt; "Hello World!" &lt;&lt; std::endl; ,我们应该还是不应该期望 Hello World! 被打印为输出?

【问题讨论】:

    标签: c++ buffer cout flush endl


    【解决方案1】:

    为了防止 SergeyA 提到的丑陋,但仍然避免输入我们通常写的“

    std::cout << "Hello World!\n";
    

    "\n" 强制在输出后换行。

    【讨论】:

      【解决方案2】:

      是的,因为所有流都在其析构函数处刷新,并且全局std::cout 对象将在程序退出时被销毁,因此将打印字符串。

      但是请注意,打印字符串的末尾不会有换行符,因此控制台提示符看起来不寻常(而且丑陋),而您的常规提示符紧跟在Hello World! 之后。

      【讨论】:

      • 假设我们在std::cout &lt;&lt;"Hello World!"; 之后添加while(true);。在这种情况下,Hello World! 会打印在终端上吗?
      • @skpro19 可能没有。
      • 但这不能保证。是吗?
      • @skpro19 不,不能保证,但如果没有发生,我会很惊讶。
      猜你喜欢
      • 2023-03-23
      • 2017-05-13
      • 2020-03-19
      • 1970-01-01
      • 1970-01-01
      • 2012-01-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多