【发布时间】:2015-04-28 11:19:55
【问题描述】:
我经常看到这种结构有什么原因:
std::string myString = someString + "text" + otherString + "more text";
...而不是这个(我很少看到):
std::string myString;
myString += someString += "text" += otherString += "more text";
阅读std::string API,在我看来operator+ 创建了很多临时变量(可能被编译器RVO 优化掉了?),而operator+= 变体只附加文本。
在某些情况下,operator+ 变体将是可行的方法。但是当您只需要将文本附加到现有的非常量字符串时,为什么不直接使用operator+=?有什么理由不这样做?
-雷恩
【问题讨论】:
-
我上次测量性能时,执行许多
+=比执行许多=和许多+更快 -
您要修改
otherString和someString吗? -
我不认为一种形式的优化会优于另一种形式。现在我们有复制省略和移动语义。 @Morb最后一次是什么时候,你使用了哪些优化级别?
-
你总是可以使用既可读又高效的字符串流。
-
第二个版本还能编译吗?我预计会出现某种与无法将字符串 += 字符串转换为字符串文字相关的错误。 (编辑:Yup, doesn't compile.)
标签: c++ append concatenation stdstring