我应该使用operator + =而不是operator +来连接std :: string吗?

时间:2015-04-28 11:19:55

标签: c++ append concatenation stdstring

我是否经常看到这种结构:

std::string myString = someString + "text" + otherString + "more text";

...而不是这个(我很少看到):

std::string myString;
myString += someString += "text" += otherString += "more text";

阅读std::string API,在我看来operator+创建了很多临时值(可能是由编译器RVO优化掉的?),而operator+=变量只附加了文本。 / p>

在某些情况下,operator+变体将成为可能。但是,当您只需要将文本附加到现有的非const字符串时,为什么不使用operator+=?有什么理由不去?

-Rein

2 个答案:

答案 0 :(得分:7)

(((myString += someString) += "text") += otherString) += "more text"; 有一种错误的关联性,你可以像第二个例子那样编写代码。为了做到你想要的,你需要像这样括起来:

std::stringstream

替代方案,为您提供所需的可读性和效率,是使用std::stringstream myString; myString << someString << "text" << otherString << "more text";

{{1}}

答案 1 :(得分:1)

std::string aaa += bbb;

类似于

std::string aaa = aaa + bbb;

因此,您的示例将更改 someString otherString 。 在通常情况下,当使用 operator + 时,您不需要担心临时工 - 在发布模式下,所有这些都将被消除(RVO和/或其他优化)。