<<运算符与C ++中字符串的重载+运算符

时间:2016-07-18 20:17:10

标签: c++ performance operators

以下两行代码之间是否有区别?

(也许是效率或某种性质的东西?)

const std::string a = "a";
const std::string b = "b";

std::cout << a << " comes before " << b << "\n";
std::cout << a + " comes before " + b + "\n";

1 个答案:

答案 0 :(得分:10)

是:

第一行调用operator<< std::coutstd::ostream类型)operator+。它打印每个操作数。

第二行调用std::string的{​​{1}},它会创建多个临时std::string个对象,然后最终调用operator<<来打印它们。

首选它,因为它避免了临时对象,并且效果更好。考虑ab类型为int的情况。第一个版本继续工作,第二个版本将不再有效。