我应该使用operator + =而不是operator +来串联std :: string吗?

萝卜地

我经常看到这种结构是否有原因:

std::string myString = someString + "text" + otherString + "more text";

...而不是这个(我很少看到):

std::string myString;
myString += someString += "text" += otherString += "more text";

在阅读std::stringAPI时,在我看来operator+会创建许多临时文件(可能是由编译器RVO优化了吗?),而该operator+=变体仅附加了文本。

在某些情况下,operator+变体将是必经之路。但是,当您只需要将文本追加到现有的非const字符串时,为什么不使用operator+=有没有理由吗?

-Rein

格子呢骆驼

operator+=与您的第二个示例一样,您编写代码的关联性有误。为此,您需要将其括起来,如下所示:

(((myString += someString) += "text") += otherString) += "more text";

提供给您所需的可读性和效率的替代方法是使用std::stringstream

std::stringstream myString;
myString << someString << "text" << otherString << "more text";

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

“ to_string”不是“ std”的成员吗?

来自分类Dev

使用std :: map时,我应该重载operator ==作为键类型吗?

来自分类Dev

我应该使用delete来保存JavaScript中的内存吗?

来自分类Dev

我到底什么时候应该使用StringBuilder而不是String

来自分类Dev

我应该使用名称空间std吗?

来自分类Dev

我应该使用std :: shared指针传递指针吗?

来自分类Dev

我应该使用ID来定位元素吗?

来自分类Dev

为什么非const std :: array :: operator []不是constexpr?

来自分类Dev

std :: string :: assign与std :: string :: operator =

来自分类Dev

我应该在operator =中使用pass-by-const-reference吗?

来自分类Dev

为什么M :: operator <<导致链接错误而不是std :: cout :: operator <<

来自分类Dev

我应该使用iframe而不是ajax吗?

来自分类Dev

我可以合法地使用带有重载operator()的结构作为std :: upper_bound的Compare吗?

来自分类Dev

我应该一直使用NSAsynchronousFetchRequest而不是NSFetchRequest吗?

来自分类Dev

为什么std :: sort不使用我的operator <实现

来自分类Dev

我应该使用接口来进行模拟吗?

来自分类Dev

我应该将printf与std :: cin混合使用吗?

来自分类Dev

使用at()访问std :: map元素比使用operator []慢吗?

来自分类Dev

使用std :: tuple来实现operator <,=等有效且正确吗?

来自分类Dev

我应该使用`mdadm --create`来恢复RAID吗?

来自分类Dev

我应该使用delete来保存JavaScript中的内存吗?

来自分类Dev

我应该使用<field>而不是<input>标记进行输入吗?

来自分类Dev

std::string 不是 std::vector<char> 吗?

来自分类Dev

我应该使用 $_GET 来动态加载 html 吗?

来自分类Dev

我应该使用模型类来创建 SqlConnection 对象吗?

来自分类Dev

我应该只使用 std::vector 吗?

来自分类Dev

我应该使用依赖注入而不是类函数吗?

来自分类Dev

我应该总是使用 shared_ptr 来创建一个类实例(而不是新的)吗?

来自分类Dev

我应该使用 std::cerr 和 exit() 而不是抛出异常吗?

Related 相关文章

  1. 1

    “ to_string”不是“ std”的成员吗?

  2. 2

    使用std :: map时,我应该重载operator ==作为键类型吗?

  3. 3

    我应该使用delete来保存JavaScript中的内存吗?

  4. 4

    我到底什么时候应该使用StringBuilder而不是String

  5. 5

    我应该使用名称空间std吗?

  6. 6

    我应该使用std :: shared指针传递指针吗?

  7. 7

    我应该使用ID来定位元素吗?

  8. 8

    为什么非const std :: array :: operator []不是constexpr?

  9. 9

    std :: string :: assign与std :: string :: operator =

  10. 10

    我应该在operator =中使用pass-by-const-reference吗?

  11. 11

    为什么M :: operator <<导致链接错误而不是std :: cout :: operator <<

  12. 12

    我应该使用iframe而不是ajax吗?

  13. 13

    我可以合法地使用带有重载operator()的结构作为std :: upper_bound的Compare吗?

  14. 14

    我应该一直使用NSAsynchronousFetchRequest而不是NSFetchRequest吗?

  15. 15

    为什么std :: sort不使用我的operator <实现

  16. 16

    我应该使用接口来进行模拟吗?

  17. 17

    我应该将printf与std :: cin混合使用吗?

  18. 18

    使用at()访问std :: map元素比使用operator []慢吗?

  19. 19

    使用std :: tuple来实现operator <,=等有效且正确吗?

  20. 20

    我应该使用`mdadm --create`来恢复RAID吗?

  21. 21

    我应该使用delete来保存JavaScript中的内存吗?

  22. 22

    我应该使用<field>而不是<input>标记进行输入吗?

  23. 23

    std::string 不是 std::vector<char> 吗?

  24. 24

    我应该使用 $_GET 来动态加载 html 吗?

  25. 25

    我应该使用模型类来创建 SqlConnection 对象吗?

  26. 26

    我应该只使用 std::vector 吗?

  27. 27

    我应该使用依赖注入而不是类函数吗?

  28. 28

    我应该总是使用 shared_ptr 来创建一个类实例(而不是新的)吗?

  29. 29

    我应该使用 std::cerr 和 exit() 而不是抛出异常吗?

热门标签

归档