【发布时间】:2016-12-27 22:56:52
【问题描述】:
下面的表达式是否会创建另一个 std::string 然后将其添加到 s1 中?
std::string s1 = "abc", s2 = "xyz";
s1 += s2 + 'b';
是否应该防止这种情况(它们会被添加到 s1 而不需要额外的工作)?
std::string s1 = "abc", s2 = "xyz";
s1 += s2;
s1 += 'b';
这些规则是否也适用于“std::string + std::string”表达式?
【问题讨论】:
-
您的问题标题与问题详情不符。
-
这些速度同样快。没有区别。
-
“修复”是为了什么?问题是什么?此外,堆栈/堆在这里具有误导性/错误/无关紧要,特别是因为
std::string动态分配其缓冲区。 -
s1 = s2 + 'b';和s1 += s2; s1 += 'b';通常不会做同样的事情。它们只有在最初s1为空时才会产生相同的效果,但如果已知s1为空,则编写s1 += s2;而不是s1 = s2;是没有意义的。 -
@LightnessRacesinOrbit "
std::string动态分配其缓冲区" 具有误导性,因为它可能使用小字符串优化。
标签: c++ performance memory