c++ - "std::string + char"表达式是否创建另一个 std::string?

标签 c++ performance memory

下面的表达式是否创建了另一个 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/

相关文章:

php - 连接字符串或使用多个回显参数 : which is faster?

mysql - 如何将一个188MB的MYISAM表放入内存

c - 当使用 char my_string[] = "some string"语法时,常量内存段中的字符串是否被删除或复制到堆栈?

c++ - 如何将数字的每个数字向右排列一步?

C++ 错误 : Expected a type specifier

c++ - 在未构造的对象上调用析构函数

c++ - 如何通过 Xlib 在启动屏幕中绘制字符串

sql-server - 糟糕的 SQL 读取性能(罪魁祸首更新统计数据?)

performance - Apache Spark/Cassandra 集群上的过度分区(任务过多)

c++ - C++ 数组初始化的目的是什么?