Lig*_*ab2 5 c++ memory performance
下面的表达式是否创建另一个std :: string然后将其添加到s1?
std::string s1 = "abc", s2 = "xyz";
s1 += s2 + 'b';
Run Code Online (Sandbox Code Playgroud)
它应该防止这种情况(他们会在没有额外工作的情况下被添加到s1)吗?
std::string s1 = "abc", s2 = "xyz";
s1 += s2;
s1 += 'b';
Run Code Online (Sandbox Code Playgroud)
这些规则是否也适用于"std :: string + std :: string"表达式?
所有+涉及std::string返回新std::string对象的重载运算符。这是当你最终破译相关文档时必然得出的结论。
因此,在您问题的第一个示例中,+运算符将返回一个临时对象,该对象将在紧随其后的+=操作完成后被销毁。
话虽如此:C++ 编译器可以采用任何产生相同可观察结果的优化。C++ 编译器很可能发现,本质上可以通过将代码的第一个版本转换为第二个版本来避免创建临时对象。我认为这不太可能,但有可能。两个版本的代码之间的结果没有明显的差异,因此优化是公平的游戏。
但是,从技术上讲,该+操作会生成一个临时std::string对象。