对cout的两次调用效率低于一次吗?

时间:2015-01-31 23:59:23

标签: c++ performance c++11 cout

我有两个问题:

  1. 两次调用std :: cout的效率是否低于一次?

  2. 如果是,编译器(通常)是否会优化它并为下面显示的三种情况生成相同的汇编?

  3. 例如:

    std::cout << "a" << "b";
    

    std::cout << "ab";
    

    std::cout << "a";
    std::cout << "b";
    

    我问,因为我认为最后一个是最可读的文本输出列表。

1 个答案:

答案 0 :(得分:3)

在本例中,

std::cout << "ab";

效率更高(我没有看到编译器“合并”输出,但我必须说我还没有找到那个 - 如果我找到一些有趣的东西,我会去查看和编辑)。

编辑:Clang(截至上周末的版本3.7)在以下情况下不合并字符串:

std::cout << "a" << "b";

另外两个代码片段是相同的,除了行数和源代码大小[通常对可执行文件没有影响,因此“无关紧要”]。

正如评论中所提到的,如果你实际上有两个字符串是例如变量,那么构造一个新字符串的开销几乎肯定不值得麻烦,std::cout的性能很少见所有这些都取决于应用程序的整体性能,而不是限制应用程序执行的整体I / O带宽。换句话说,当需要几毫秒才能将某些内容写入控制台时,尝试保存几微秒是毫无意义的。