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

时间:2016-11-02 12:48:42

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

我想知道以下代码是否会获得更好的性能

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

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

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

您更喜欢哪种方式?

1 个答案:

答案 0 :(得分:0)

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

如果没有性能差异,我更喜欢第一个,因为初始化列表过载太多了。例如,让Obj成为一个具有构造函数的类,该构造函数将两个整数作为参数。你知道std :: vector< int>还有一个构造函数,它接受两个整数作为参数。但是当你给一个向量<的初始化列表{1,3}。 int&gt ;,不调用双整数参数构造函数!与Obj案不同。