打印单个字符的合适方法是什么?

时间:2013-11-17 10:29:30

标签: c++

假设我想使用C ++流来打印字符&#39; c,更好的方法是cout << 'c'还是cout << "c"

更具体地说,这两种方法之间的性能有何不同?

4 个答案:

答案 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'(以及仍留在缓冲区中的任何其他内容)将被刷新到外部输出序列,因为它应该是,因为在性能方面,刷新单个字符可以忽略不计。