C++ Weekly - Episode 140 脱水版: Use `cout`, `cerr`, and `clog` Correctly

24 阅读1分钟

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";