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

时间:2009-10-03 06:32:32

标签: c++ variables declaration

  

可能重复:
  Is there a difference in C++ between copy initialization and assignment initialization?

我是C ++的新手,我很少看到有人使用这种语法来声明和初始化变量:

int x(1);

我试过,编译器没有抱怨,输出和int x = 1相同,它们实际上是一样的吗?

非常感谢大家。

3 个答案:

答案 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 ++专家,但如果它给出相同的结果,那有关系吗?我想如果你真的感兴趣,你可以编译(但不能组装)你的代码,看看有什么区别。

编辑:正如其他地方所提到的,内置类型确实相同。