[英]Does printf() convert its arguments to string like cout?
我开始从C学习C ++。最近,我刚读了一本关于C ++的教程。 在“ 介绍流 ”一节中,本书注意到:
<<运算符被重载,因此右侧的操作数可以是字符串或任何原始值。 如果此操作数不是字符串,则<<运算符在将其发送到输出流之前将其转换为字符串形式。
所以我想知道C中的printf()
函数是否具有相同的效果。 如果没有,请告诉我他们两者之间的差异。
好吧,当然它必须以某种方式生成每个参数的字符串表示,这是为了打印一些东西所需要的。 打印包括将字符流发送到输出设备,除非您有一系列字符,否则无法打印。
printf()
函数使用格式化字符串来控制如何解释每个参数以创建字符表示,以及如何在输出时格式化该表示。
请注意,当然可以在外部看到参数的“转换”。 不可能
printf("%d\n", 47);
可以使47
成为一个字符串到位; C使用call by value,因此函数只获取值的副本,然后使用%d
转换说明符中隐含的类型信息来确定如何生成组成的两个字符'4'
和'7'
印刷品。
所以我想知道C中的printf()函数是否具有相同的效果。
C和C ++都使用流来输出。 在C中它是stdout
,在C ++中它是cout
。
虽然从语句printf
写入标准输出(stdout)说明终端是不明显的。
在cout的情况下,从声明本身可以看出输出正在进行的情况。
一些微妙的差异
使用cout
你可能需要包含一个额外的标题 - 比如说iomanip - 并使用一些函数 - 比如setw() - 来获得精确的格式,就像你在printf
依赖格式字符串一样。
性能 - 每个都有自己的优势,具体取决于您打印的内容和打印位置。 我从这里借了这一点。
另一个相似
C ++和C标准都没有提及函数参数的评估顺序。 所以你不能尝试功能性的花哨的东西。 例如,你不应该这样做
printf(%d%d",++i,i++); // The behaviour is undefined.
你也不应该这样做
cout<<++i<<++i; // The behaviour is undefined.
注意:
请记住,如果包含必要的标头,则c流可在C ++中使用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.