7

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

这在语义上是否等效?

X x = 42;
X x(42);

我相信只有在 X 的构造函数中添加显式关键字时才会出现差异。否则编译器会将表达式简化X x = 42;X x(42);

如果我错了,请纠正我。

4

2 回答 2

7

表格

X x = 42;

要求构造函数是非显式的并且存在可访问的复制构造函数。该实现被允许构造一个临时的并将其复制过来,但我所知道的没有一个实现可以做到这一点。

于 2012-03-19T20:57:28.460 回答
5

这两种操作在语义上因规范中的语言而异,但在以下情况下编译后的有效结果是相同的:

  1. 有一个参数构造函数X可以采用整数类型,并且参数类型不是非常量左值引用
  2. 有一个参数构造函数,用于X将整数类型转换为参数类型,并且参数再次不是非常量左值引用
  3. 在 #2 的情况下,构造函数未声明为explicit
于 2012-03-19T20:49:03.317 回答