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

raa*_*and 6 c++ concatenation append stdstring

有没有理由我经常看到这个结构:

std::string myString = someString + "text" + otherString + "more text";
Run Code Online (Sandbox Code Playgroud)

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

std::string myString;
myString += someString += "text" += otherString += "more text";
Run Code Online (Sandbox Code Playgroud)

阅读std::stringAPI,在我看来,operator+创建了很多临时工(可能是由编译器RVO优化?),而operator+=变体只附加文本.

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

-Rein

Tar*_*ama 7

operator+=有一种错误的关联性,你可以像第二个例子那样编写代码.为了做你想做的事,你需要像这样括起来:

(((myString += someString) += "text") += otherString) += "more text";
Run Code Online (Sandbox Code Playgroud)

替代方案,为您提供所需的可读性和效率,是使用std::stringstream:

std::stringstream myString;
myString << someString << "text" << otherString << "more text";
Run Code Online (Sandbox Code Playgroud)