多次插入 (<<) 与串联输出 (+)
Multiple insertions (<<) vs concatenating output (+)
我想知道这样做有什么区别,例如,
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
第一个版本只需要对每个涉及的类型重载<<
。
第二个需要对每对涉及的类型进行重载+
,还需要创建一个结果类型的对象,然后可以输出该对象。诚然,对于该结果类型,<<
只需要重载。
根据重载的复杂程度,尤其是结果类型对象的创建,这些差异可能会影响速度。
出于优化目的,始终需要进行测量而不是猜测。但我想我敢打赌,不必为了速度而创建对象,也不必为了简单而进行多次重载。
相关文章:
- 递归函数计算序列中的平方和(并输出过程)
- 如何使用 < 和 > 命令获取 c++ 中的输入和输出?
- 请解释"函数1(p1,p2,p3);"的输出
- C++:将控制台输出存储在宏中更好吗
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- 如何在OMNET++中指定与命令行参数组合的输出文件名
- 请解释这句话(cout<<1+int((a<b)^((b-a)&1) )<<endl
- 为什么我的代码在输出中增加了93天
- 如何从void函数输出字符串
- 输入到文件并输出到另一个文件,并将流文件传递给函数
- 呼叫运营商<<临时
- AES加密到解密未正确输出
- 如何将c++程序的一些输出传递给shell,以便在shell中使用
- 使用C++程序合并排序没有得到正确的输出
- 为什么我不能在不创建字符串变量的情况下使用函数的字符串输出
- C++格式化输出问题
- 过载输出<<用于类的运算符,以打印其中的元组
- 重载运算符<<输出地址而不是数据成员
- 什么会导致死亡<<变量& lt; & lt;“ t";当输出超过终端宽度时,打印空白而不是值
- Can运算符<<用于设计我们自己的输出显示方式