【问题标题】:Move constructor used in aggregation initialization [closed]聚合初始化中使用的移动构造函数[关闭]
【发布时间】:2016-11-02 12:48:42
【问题描述】:

不知道下面的代码是否会获得更好的性能

Obj obj;
obj.a = std::move(...);
...

相比

Obj obj = {std::move(...), ...};

编译器可以对上面的代码进行优化吗?

你更喜欢哪种方式?

【问题讨论】:

  • 我不明白为什么它通常很重要,但像往常一样,您需要在您的特定平台上自己测试它。

标签: c++ initialization compiler-optimization move-semantics


【解决方案1】:

我在http://godbolt.org/ 上尝试了您的代码的简单实现,发现在这两种情况下编译器都能够进行优化。

如果没有性能差异,我更喜欢第一个,因为初始化列表过载太多。例如,让 Obj 是一个类,它有一个以两个整数作为参数的构造函数。你知道 std::vector 也有一个构造函数,它接受两个整数作为参数。但是,当您将初始化列表 {1, 3} 提供给向量 时,不会调用两个整数参数的构造函数!与 Obj 案例不同。

【讨论】:

    猜你喜欢
    • 2011-09-10
    • 1970-01-01
    • 1970-01-01
    • 2016-10-02
    • 2019-11-30
    • 2018-04-08
    • 2021-10-12
    • 2019-09-10
    • 1970-01-01
    相关资源
    最近更新 更多