libyoga - C++ 的现代输出
动机
如果 C++ 程序员想要在命令行中打印一些东西,基本上可以在来自 cstdio 的旧 C 函数或稍微较新的 C++ 流之间进行选择。 这两个接口都有很大的问题:
printf-family 是极其危险和愚蠢的:
使用稍微错误的格式字符串会导致未定义的行为。
函数无法推断其参数的类型,它们必须通过格式字符串传递。
使用 typedefed 整数类型编写可移植代码是很可笑的。 正确的解决方案是包含 inttypes.h,它为正确的类型提供宏。 这会导致这样的调用: printf("foo%" PRI64 "bar, uint64_t{0});
虽然流解决了这些问题,但它们自己也创造了几个问题:
使用流格式化输出非常冗长。 要以十六进制打印具有 16 个字符(前导零)的 uint64_t,必须这样写: stream << std::set
2021-06-07 20:03:34
24KB
C++
1