我似乎无法在网上找到关于这两者之间差异的任何信息。几乎所有在线教学资源(learncpp.com,cplusplus.com等)似乎都使用Obj x(n);
初始化Obj x
,但当我使用Obj x = Obj(n)
时,我的编译器并没有抱怨我认为没有区别。是真的有区别,还是仅仅是一种风格选择?
答案 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
,然后将其初始化为构造临时的结果。
第一种情况更快,产生的机器代码更少。