在c ++中,Obj x = Obj(n)和Obj x(n)之间的区别是什么?

时间:2015-05-18 04:04:13

标签: c++ constructor initialization

我似乎无法在网上找到关于这两者之间差异的任何信息。几乎所有在线教学资源(learncpp.com,cplusplus.com等)似乎都使用Obj x(n);初始化Obj x,但当我使用Obj x = Obj(n)时,我的编译器并没有抱怨我认为没有区别。是真的有区别,还是仅仅是一种风格选择?

2 个答案:

答案 0 :(得分:3)

使用

//

被称为Direct Initialization。它调用可以接受Obj x(n); 作为参数的构造函数来初始化n

使用

x

被称为Copy Initialization。从理论上讲,这会使用Obj x = Obj(n); 构造一个临时Obj,并调用复制构造函数来初始化n。一些编译器能够优化临时。

答案 1 :(得分:0)

Obj x(n);x声明为Obj,然后构建它。

Obj x = Obj(n)x声明为Obj,然后将其初始化为构造临时的结果。

第一种情况更快,产生的机器代码更少。