在一些遗留代码中看到以下内容:
class A {
&A() { ... }
}
什么“&”是用来?它在VC ++ 2008中编译,看起来像默认构造函数, bug gcc无法编译它。
答案 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 。