假设我想使用C ++流来打印字符&#39; c,更好的方法是cout << 'c'
还是cout << "c"
?
更具体地说,这两种方法之间的性能有何不同?
答案 0 :(得分:3)
从技术上讲,它将是第一个变体,因为'c'
是单个字符,"c"
不是。{1}}。双引号字符串文字是以空值终止的字符数组。 "c"
的类型为const char[2]
,其中包含{'c', '\0'}
。
至于是否存在性能差异,您必须自己测量和查看。
答案 1 :(得分:3)
"c"
不是字符,而是“字符串”-literal。它隐含地包含一个2 nd 字符(未打印'\0'
)来终止“字符串”。
所以使用:
cout << 'c';
<强>更新强>
由于C-“字符串”是比单个char[]
更复杂的数据结构(即数组char
),我要说至少在理论上打印char
应该更快。
答案 2 :(得分:1)
如果您关心性能,那么您应该忘记标准流并进入较低级别。由于我确实不完全清楚的原因<iostream>
的原始速度性能与<stdio.h>
相比非常差(这是我过去的经验,流输入是最差的)。
通常,对于I / O性能,最好通常是进行显式缓冲。然后单个字符的输出变为:
buf[wp] = c;
if (++wp == BUFSIZE) buffer_flush();
(通过在应用程序级别工作,您还可以通过避免对每个char进行测试并使用异步写入来改进更多。)
答案 3 :(得分:0)
正如其他答案所指出的那样,使用cout << 'c'
是首选变体,因为它不如C字符串复杂。但是,如果不需要格式化并且您只需要将字符写入标准输出,则最好简单地使用低级无格式输入函数并在此之后进行刷新:
std::cout.put('c').flush();
由于格式化在这种情况下不适用,因此效率更高。此外,字符'c'
(以及仍留在缓冲区中的任何其他内容)将被刷新到外部输出序列,因为它应该是,因为在性能方面,刷新单个字符可以忽略不计。