可能重复:
复制初始化和赋值初始化在 C++ 中有区别吗?
我是 C++ 新手,很少看到有人使用这种语法来声明和初始化变量:
int x(1);
我试过了,编译器没有报错,输出和 int x=1 一样,它们真的是一回事吗?
非常感谢大家。
可能重复:
复制初始化和赋值初始化在 C++ 中有区别吗?
我是 C++ 新手,很少看到有人使用这种语法来声明和初始化变量:
int x(1);
我试过了,编译器没有报错,输出和 int x=1 一样,它们真的是一回事吗?
非常感谢大家。
是的,对于内置类型int x = 1;
和int x(1);
是相同的。
在构造类类型的对象时,两种不同的初始化语法有细微的不同。
Obj x(y);
这是直接初始化,并指示编译器搜索一个明确的构造函数,该构造函数采用y
或y
可以隐式转换为的东西,并使用此构造函数来初始化 x。
Obj x = y;
这是复制初始化Obj
,并指示编译器通过转换创建一个临时对象,y
并使用Obj
的复制构造函数进行初始化x
。
当 的类型与的类型相同时,复制初始化相当于直接初始化。y
x
对于复制初始化,因为使用的临时是隐式转换的结果,explicit
所以不考虑标记的构造函数。构造类型的复制构造函数必须是可访问的,但编译器可以将复制本身作为优化消除。
对于 POD 类型,两个语句是相同的。
我不是 C++ 专家,但如果它给出相同的结果,这有关系吗?我想如果你真的感兴趣,你可以编译(但不汇编)你的代码,看看有什么区别。
编辑:正如在其他地方提到的,它们对于内置类型确实是相同的。