可能重复:
Is there a difference in C++ between copy initialization and assignment initialization?
我是C ++的新手,我很少看到有人使用这种语法来声明和初始化变量:
int x(1);
我试过,编译器没有抱怨,输出和int x = 1相同,它们实际上是一样的吗?
非常感谢大家。
答案 0 :(得分:13)
是的,对于内置类型int x = 1;
和int x(1);
是相同的。
构造类类型的对象时,两种不同的初始化语法略有不同。
Obj x(y);
这是直接初始化并指示编译器搜索带有y
的明确构造函数,或y
可以隐式转换为的内容,并使用此构造函数初始化x。
Obj x = y;
这是复制初始化,并指示编译器通过转换Obj
创建临时y
并使用Obj
的复制构造函数来初始化{{1 }}
x
的类型与y
的类型相同时,复制初始化等同于直接初始化。
对于 copy initalization ,因为临时使用是隐式转换的结果,所以不考虑标记为x
的构造函数。构造类型的复制构造函数必须是可访问的,但编译器本身可以作为optmization消除。
答案 1 :(得分:1)
对于POD类型,两个语句都是相同的。
答案 2 :(得分:0)
我不是C ++专家,但如果它给出相同的结果,那有关系吗?我想如果你真的感兴趣,你可以编译(但不能组装)你的代码,看看有什么区别。
编辑:正如其他地方所提到的,内置类型确实相同。