我有两个问题:


对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";


除行数和源代码大小外,其他两个代码段是相同的(它们通常对可执行文件没有影响,因此“无关紧要”)。

如注释中所述,如果实际上有两个字符串(例如变量),那么构造新字符串的开销几乎肯定是不值得的,并且std::cout的性能对整体性能几乎没有影响而不是总I / O带宽限制了应用程序的执行。换句话说,在花费几毫秒的时间向控制台写入内容时尝试节省几微秒是没有意义的。

关于c++ - 两次调用cout的效率是否比一次低?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28257962/

10-12 22:18