C++ Weekly - Episode 140 脱水版: Use cout
, cerr
, and clog
Correctly
正确使用
cout
,cerr
,clog
我们经常用 std::cout
用来输出, 例如:
std::cout << "Hello, World" << std::endl;
std::endl
不止做了换行的工作, 它等价于:
std::cout << "Hello, World" << "\n" << std::flush;
大多数情况下, 我们不一定需要刷新缓冲区, 而且这可能会带来性能问题. 假如我们向文件里面写入大量数据, 每一行结束我们都刷新缓冲, 这可能不是我们所期望的. 这种情况, 一般建议直接输入一个换行符即可:
std::cout << "Hello, World\n";
但是有些情况下, 比如调试代码时必须刷新缓冲区才能看到完整的输出. 针对之前所说的, 必须需要刷新缓冲区的情况, 可以采用 std::cerr
. 这是一个标准错误输出流, 不经过缓冲区, 直接输出. 同时还有一个 std::clog
, 这也是一个标准错误输出流, 但是它和 std::cerr
不同, 它通过缓冲区来输出, 不会强制刷新, 有点类似 std::cout
.
std::cerr << "Hello, World.\n";
std::clog << "Hello, World.\n";