使用“X x(42)”和“X x = 42”的对象构造的差异?

时间:2012-03-19 20:46:38

标签: c++ constructor explicit-constructor

假设我们有定义构造函数X(int value)的类X.

这在语义上是否相同?

X x = 42;
X x(42);

我相信只有当我们将显式关键字添加到X的构造函数时才会出现差异。 否则,编译器会将表达式X x = 42;减少为X x(42);

如果我错了,请纠正我。

2 个答案:

答案 0 :(得分:7)

表格

X x = 42;

要求构造函数是非显式的,并且存在可访问的复制构造函数。允许实现构造一个临时的并将其复制,但我知道没有实现。

答案 1 :(得分:5)

从语义上讲,这两个操作对于规范中的语言是不同的,但编译后的有效结果在以下情况下是相同的:

  1. X有一个参数构造函数可以采用整数类型,参数类型不是非常量l值引用
  2. X有一个参数构造函数,其中一个整数类型可以转换为参数类型,并且参数也不是非常量l值引用
  3. 对于#2,构造函数未声明为explicit