奇怪的默认构造函数语法

时间:2010-11-08 11:31:05

标签: c++ visual-c++

在一些遗留代码中看到以下内容:

class A {
    &A() { ... }
}

什么“&”是用来?它在VC ++ 2008中编译,看起来像默认构造函数, bug gcc无法编译它。

1 个答案:

答案 0 :(得分:7)

虽然在语法中这个位置允许语法&(它是声明符的一个例子,它是序列: ptr-operator declarator ,{ {1}}是 ptr-operator ),在语义上它没有意义,在这里不允许。它纯粹从语法的角度来看是有效的,这可能表明Visual Studio可能接受它的原因。

检查可能性,此声明看起来像一个没有返回类型的函数定义。 7 [dcl.dcl] / 6表示:“只有在构造函数,析构函数和类型转换的函数声明中,才能省略 decl-specifier-seq 。”并且没有&~唯一的可能性是构造函数声明。

12.1 [class.ctor] / 1描述了用于构造函数的特殊声明符语法,它只能是 function-specifiers 的可选序列,后跟构造函数的类名。在构造函数的类名之前,不允许operator或其他 ptr-operator