"std::string + char"表达式会创建另一个 std::string 吗?

Does "std::string + char" expression create another std::string?

本文关键字:string std 另一个 创建 char 表达式      更新时间:2023-10-16

下面的表达式是否创建另一个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的所有重载+操作员返回新的std::string对象。这是当您最终破译相关文档时,您将得出不可避免的结论。

因此,在您的问题中的第一个示例中,+操作员将返回一个临时对象,该对象将在立即关注+=操作完成后被销毁。

说:允许C 编译器采用任何相同可观察结果的优化。C 编译器可能会发现,可以通过将代码的第一个版本转换为第二个版本,从本质上讲,有可能避免创建临时对象的需要。我认为这不太可能,但这是可能的。代码的两个版本之间的结果没有明显的差异,因此优化是公平的游戏。

但是,从技术上讲,+操作产生临时std::string对象。

取决于上下文。在您的代码段中,不会有另一个对象,s2'b'将附加到已经存在的s1

http://www.cplusplus.com/reference/string/string/string/operator =/

例如,在这种情况下:

std::string s1 = "abc";
std::string s2 = "zxy";
std::string result = s1 + s2;

result是新对象condentent s1s2