繁体   English   中英

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

[英]Should I use operator+= instead of operator+ for concatenating std::string?

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

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

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

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

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

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

-Rein

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

(((myString += someString) += "text") += otherString) += "more text";

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

std::stringstream myString;
myString << someString << "text" << otherString << "more text";

看到

std::string aaa += bbb;

类似于

std::string aaa = aaa + bbb;

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM