C++中int x = 1和int x(1)有什么区别?

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)

这是直接初始化,并指示编译器搜索一个明确的构造函数,该构造函数采用yy可以隐式转换为的东西,并使用此构造函数初始化x.

Obj x = y;
Run Code Online (Sandbox Code Playgroud)

这是复制初始化,并指示编译器Obj通过转换y和使用Obj的复制构造函数来初始化来创建临时x.

复制初始化相当于直接初始化时的类型与类型y相同x.

对于复制初始化,因为临时使用是隐式转换的结果,explicit所以不考虑标记的构造函数.构造类型的复制构造函数必须是可访问的,但编译器本身可以作为optmization消除.

  • 值得注意的另一件事是允许以这种方式初始化诸如int之类的普通旧数据类型(使用类似于类构造函数调用的语法)允许模板透明地使用POD和类类型. (3认同)