下面的表达式是否创建了另一个 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
对象。这是您在you finally decipher the relevant documentation时得出的必然结论。 .
因此,在您问题的第一个示例中, +
运算符将返回一个临时对象,该对象将在紧随其后的 +=
完成后被销毁操作。
话虽如此:允许 C++ 编译器采用任何产生相同可观察结果的优化。 C++ 编译器极有可能发现,通过将代码的第一个版本转换为第二个版本,本质上可以避免创建临时对象的需要。我认为这不太可能,但这是可能的。两个版本的代码在结果上没有明显差异,因此优化是公平的。
但是,从技术上讲,+
操作会生成一个临时的 std::string
对象。
关于c++ - "std::string + char"表达式是否创建另一个 std::string?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41353227/