我有两个问题:
两次调用std :: cout的效率是否低于一次?
如果是,编译器(通常)是否会优化它并为下面显示的三种情况生成相同的汇编?
例如:
std::cout << "a" << "b";
或
std::cout << "ab";
或
std::cout << "a";
std::cout << "b";
我问,因为我认为最后一个是最可读的文本输出列表。
答案 0 :(得分:3)
在本例中,
std::cout << "ab";
效率更高(我没有看到编译器“合并”输出,但我必须说我还没有找到那个 - 如果我找到一些有趣的东西,我会去查看和编辑)。
编辑:Clang(截至上周末的版本3.7)在以下情况下不合并字符串:
std::cout << "a" << "b";
另外两个代码片段是相同的,除了行数和源代码大小[通常对可执行文件没有影响,因此“无关紧要”]。
正如评论中所提到的,如果你实际上有两个字符串是例如变量,那么构造一个新字符串的开销几乎肯定不值得麻烦,std::cout
的性能很少见所有这些都取决于应用程序的整体性能,而不是限制应用程序执行的整体I / O带宽。换句话说,当需要几毫秒才能将某些内容写入控制台时,尝试保存几微秒是毫无意义的。