多次插入 (<<) 与串联输出 (+)

Multiple insertions (<<) vs concatenating output (+)

本文关键字:lt 输出 插入      更新时间:2023-10-16

我想知道这样做有什么区别,例如,

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(一样,是更快和/或更可靠?

这是我的示例代码的编译"小提琴">:https://gcc.godbolt.org/z/MPetxq

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

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