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

时间:2019-12-16 20:07:04

标签: 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中那样将所有内容连接到输出之前,更快和/或更可靠?

这是我的示例代码https://gcc.godbolt.org/z/MPetxq

的编译“小提琴”

1 个答案:

答案 0 :(得分:6)

第一个版本只需要为每种涉及的类型重载<<
第二个方法要求为每个出现的相关类型对重载+,还需要创建一个结果类型的对象,然后可以将其输出。诚然,<<仅需要针对该结果类型进行重载。

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