C++ 中的 Obj x = Obj(n) 和 Obj x(n) 有什么区别?

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

我似乎无法在网上找到关于这两者之间差异的任何信息。几乎所有在线教学资源(learncpp.com、cplusplus.com 等)似乎都使用 Obj x(n); 来初始化 Obj x,但是当我使用 Obj x = Obj(n) 时,我的编译器不会'不要抱怨,我看不出有什么不同。真的有区别吗,还是只是风格选择?

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

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

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

正在使用

Obj x(n);

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

正在使用

Obj x = Obj(n);

被称为Copy Initialization。理论上,这里使用n构造了一个临时的Obj,调用拷贝构造函数初始化x。一些编译器能够优化掉临时文件。