繁体   English   中英

printf()将其参数转换为像cout一样的字符串吗?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM