聚合初始化中使用的移动构造函数

Move constructor used in aggregation initialization

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

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

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

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

你更喜欢哪种方式?

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

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