C++ 23 std::print 或 std::println 是否刷新输出流?

use*_*501 6 c++ stl fmt c++23

在 C++ 23 之前,当使用std::cout将输出发送到时stdout,以下两种在打印字符串末尾添加新行的方法之间存在区别:

  • std::cout << "Hello World\n";
  • std::cout << "Hello World" << std::endl;

其中第二个通常更可取,因为它会导致输出流刷新,而不是需要调用std::cout.flush().

在 C++ 23 中,现在有两个新的打印函数以及标准库的新组件。我们有std::printstd::println

在刷新输出流时,这些函数是否有区别?

或者,刷新输出流是否不再是这些新实现中相关的概念?

文档中cppreference没有提到冲洗:

S.M*_*.M. 0

标准没有对此进行规定。

我查看了 Microsoft STL打印源和 MSprint刷新流(如果它们输出到 Unicode 控制台)。当多个流输出到控制台时,他们似乎希望避免不必要的多字节字符分割。