c++ - 多次插入 (<<) 与连接输出 (+)

标签 c++ output operators ostream

我想知道做之间有什么区别,例如,

void example1(ostream &out, string &name, string &title, int years) {
    out << "Hello, my name is " << name << " and I have been working as a "
        << title << " for " << years << " years.\n";
}

和,

void example2(ostream &out, string &name, string &title, int years) {
    out << "Hello, my name is " + name + " and I have been working as a "
        + title + " for " + to_string(years) + " years.\n";
    }

example1 多次调用插入运算符,而 example2 在连接所有字符串后仅调用一次插入运算符。一个比另一个更安全或更高效?是否同样关注 cout关于这一点也适用于其他输出流,例如 ostringstream ?

换句话说,使用 << 单独输出字符串数据是否更快和/或更可靠?如示例 1 中所示,或者在将其发送到输出之前连接所有内容,如示例 2 中所示?

这是我的示例代码的编译“ fiddle ”:https://gcc.godbolt.org/z/MPetxq

最佳答案

第一个版本只需要重载<<对于每个涉及的类型。
第二个需要重载+对于每对出现的相关类型,还需要创建一个结果类型的对象,然后可以输出该对象。诚然,<<只需要为该结果类型重载。

根据重载的复杂程度,尤其是结果类型对象的创建,这些差异可能会对速度产生影响。
出于优化目的,总是需要进行测量而不是猜测。但我认为我敢打赌不必为了速度而创建对象,也不必为了简单起见而进行多次重载。

关于c++ - 多次插入 (<<) 与连接输出 (+),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59363578/

相关文章:

c - 如何在 C 中跳过输入文件的第一行?

plsql - 如何在oracle sql developer中运行pl/sql程序

ruby - 在 Ruby 中编写此条件的更短方法 n != 1 && n != 2 && n != 3 && n !=4

c++ - 仅在声明定义时检查 vector/数组边界

c - 二进制转十进制...输出错误

c - 为什么 C 中运算符之间的关联性不同?

c++ - 在同一个 UI 中使用 QVTKWidget 和 QOpenGLWidget?

c++ - 为什么叫运算符重载呢?

c++ - 程序接收信号 SIGILL,非法指令

python - Py_DECREF 段错误