在C++中使用printf

Use of printf in C++

本文关键字:printf C++      更新时间:2023-10-16

在网站上搜索"printf vs cout",发现了关于两者差异的讨论,但这不是我想要的。来自Python,我非常喜欢printf使用字符串格式的方式,如果可能的话,我宁愿避免使用cout

忽略cout而只使用printf是否被认为是不好的做法?这样做会有什么影响?在哪些情况下,使用printf不是一种选择?

1)您只能将printf用于基本类型,而对于整数,它实际上只能用于"原生"类型intlong int等。像uint32_t这样的东西需要相当笨拙和繁琐的宏来进行可移植打印。根本不支持用户定义的类型。

2) printf不是类型安全的。也就是说,代码的正确性取决于格式化字符串的,并且仅凭静态分析无法判断程序的格式是否良好。这是C类型系统的根本弱点,"适当的"C++避免了这一点。

也就是说,printf(或者可能是(v)snprintf)通常比iostream快一点,因此在高性能环境中(例如,高频日志记录),它是一个非常有竞争力的替代方案。但是,如果您只是偶尔进行输出操作,那么您应该更喜欢iostream,或者其他一些灵活、类型安全、惯用的C++方法。(不可否认,iostreams可能是C++最可怕的角落之一。)

cout是类型安全的。coutostream,因此它与其他ostream具有相同的接口——例如,您可以为打印foo提供新的重载。

printf的格式字符串有时比cout的格式方法要好。

忽略cout而只使用printf是否被认为是不好的做法?

不,如果您更喜欢使用printf,请继续。

这样做会有什么影响?

无。C++的方法是使用cout,因为它应该更简单。

在某些情况下,使用printf是不可行的?

我怀疑你会发现这样的案例。如果你这样做了,人们写它们太主观了。