bob*_*obo 6 c++ variables declaration
可能重复:
复制初始化和赋值初始化之间的C++是否存在差异?
我是C++的新手,我很少看到有人使用这种语法来声明和初始化变量:
int x(1);
Run Code Online (Sandbox Code Playgroud)
我试过,编译器没有抱怨,输出和int x = 1相同,它们实际上是一样的吗?
非常感谢大家.
CB *_*ley 13
是的,对于内置类型int x = 1;并且int x(1);是相同的.
在构造类类型的对象时,两种不同的初始化语法略有不同.
Obj x(y);
Run Code Online (Sandbox Code Playgroud)
这是直接初始化,并指示编译器搜索一个明确的构造函数,该构造函数采用y或y可以隐式转换为的东西,并使用此构造函数初始化x.
Obj x = y;
Run Code Online (Sandbox Code Playgroud)
这是复制初始化,并指示编译器Obj通过转换y和使用Obj的复制构造函数来初始化来创建临时x.
复制初始化相当于直接初始化时的类型与类型y相同x.
对于复制初始化,因为临时使用是隐式转换的结果,explicit所以不考虑标记的构造函数.构造类型的复制构造函数必须是可访问的,但编译器本身可以作为optmization消除.