在C++中使用printf
Use of printf in C++
在网站上搜索"printf vs cout",发现了关于两者差异的讨论,但这不是我想要的。来自Python,我非常喜欢printf
使用字符串格式的方式,如果可能的话,我宁愿避免使用cout
。
忽略cout
而只使用printf
是否被认为是不好的做法?这样做会有什么影响?在哪些情况下,使用printf
不是一种选择?
1)您只能将printf
用于基本类型,而对于整数,它实际上只能用于"原生"类型int
、long int
等。像uint32_t
这样的东西需要相当笨拙和繁琐的宏来进行可移植打印。根本不支持用户定义的类型。
2) printf
不是类型安全的。也就是说,代码的正确性取决于格式化字符串的值,并且仅凭静态分析无法判断程序的格式是否良好。这是C类型系统的根本弱点,"适当的"C++避免了这一点。
也就是说,printf
(或者可能是(v)snprintf
)通常比iostream快一点,因此在高性能环境中(例如,高频日志记录),它是一个非常有竞争力的替代方案。但是,如果您只是偶尔进行输出操作,那么您应该更喜欢iostream,或者其他一些灵活、类型安全、惯用的C++方法。(不可否认,iostreams可能是C++最可怕的角落之一。)
cout
是类型安全的。cout
是ostream
,因此它与其他ostream
具有相同的接口——例如,您可以为打印foo
提供新的重载。
printf
的格式字符串有时比cout
的格式方法要好。
忽略cout而只使用printf是否被认为是不好的做法?
不,如果您更喜欢使用printf
,请继续。
这样做会有什么影响?
无。C++的方法是使用cout
,因为它应该更简单。
在某些情况下,使用printf是不可行的?
我怀疑你会发现这样的案例。如果你这样做了,人们写它们太主观了。
- 为什么在C的循环中使用printf的Rust代码不显示输出,而在C++的循环中显示std::cout
- 内联程序集printf将整数解释为地址
- 为什么mpfr_printf与十六进制浮点(%a转换说明符)的printf不同
- C++ Setter/Getter,cout 工作,printf 失败
- Printf 命令不打印时添加了查找常见除数的新代码
- SIGSEGV, 分段错误. 而 printf() 数组索引的值
- 为什么在包含iostream时可以使用printf()?
- 创建具有验证和语法突出显示的自定义 printf
- 0x%08lx 格式说明符在 printf 语句到 cout
- C printf 无法从终端按预期工作
- Printf 和 Echo 提供不同的输出
- C++ - scanf() 和 printf() 执行顺序不对
- cout 打印不准确的结果,printf 打印准确的结果
- 了解 printf 格式规范中的 %03.3u
- redefine printf(), sprintf(), etc. arm-none-eabi toolchain
- 为什么 printf 在 C++ 中的执行速度比 cout 快?另外scanf比cin慢,为什么?
- C++, printf vs cout performance
- printf 数据类型说明符复杂问题
- 在"printf"中使用标签"h"或"hh"是否涉及未定义的
- printf() 中 %f 和 %F 之间的区别?