>我有两个问题:
-
对 std::cout 的两次调用是否比一次效率低?
-
如果是,编译器(通常)是否对其进行优化并为下面显示的三种情况生成相等的程序集?
例如:
std::cout << "a" << "b";
或
std::cout << "ab";
或
std::cout << "a";
std::cout << "b";
我问,因为我认为最后一个对于要输出的较长文本列表来说是最具可读性的。
在这个例子中,
std::cout << "ab";
更有效率(我还没有看到编译器"合并"输出,但我必须说我也没有寻找它 - 如果我发现有趣的东西,我会去查看和编辑)。
编辑:Clang(截至上周末的3.7版本)在以下情况下不会合并字符串:
std::cout << "a" << "b";
其他两个代码片段是相同的,除了行数和源代码大小[通常对可执行文件没有影响,所以"无关紧要"]。
如注释中所述,如果您实际上有两个字符串,例如变量,则构造新字符串的开销几乎肯定不值得麻烦,并且除了限制应用程序执行的整体 I/O 带宽之外,std::cout
的性能对应用程序的整体性能至关重要。换句话说,当将某些内容写入控制台需要几毫秒时,试图节省几微秒是没有意义的。