在 c++ 中,Obj x = Obj(n) 和 Obj x(n) 有什么区别?

What's the difference between Obj x = Obj(n) and Obj x(n) in c++?

本文关键字:Obj 什么 区别 c++      更新时间:2023-10-16

我似乎在网上找不到任何关于这两者的区别。几乎每个在线教学源(learncpp.com, cplusplus.com等)似乎都使用Obj x(n);来初始化Obj x,但是当我使用Obj x = Obj(n)时,我的编译器没有抱怨,我看不到任何差异。这真的有区别吗,还是仅仅是一种风格的选择?

使用

Obj x(n);

称为直接初始化。它调用可以接受n作为参数的构造函数来初始化x

使用

Obj x = Obj(n);

称为Copy Initialization。理论上,这将使用n构造一个临时Obj,并调用复制构造函数初始化x。有些编译器能够优化掉临时的。

Obj x(n);声明xObj,然后构造它。

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

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