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
。一些编译器能够优化掉临时文件。
我似乎无法在网上找到关于这两者之间差异的任何信息。几乎所有在线教学资源(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
。一些编译器能够优化掉临时文件。