奇怪的默认构造函数语法

dim*_*mba 10 c++ visual-c++

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

class A {
    &A() { ... }
}
Run Code Online (Sandbox Code Playgroud)

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

CB *_*ley 7

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

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

12.1 [class.ctor]/1描述了用于构造函数的特殊声明符语法,它只能是一个可选的函数说明符序列,后跟构造函数的类名.没有&或其他PTR运营商将在构造函数的类名前允许.