在一些遗留代码中看到以下内容:
class A {
&A() { ... }
}
Run Code Online (Sandbox Code Playgroud)
什么"&"用于?它在VC++ 2008中编译,看起来像默认构造函数,bug gcc无法编译它.
虽然在语法&中这个位置允许语法(它是一个声明符的例子,它是序列:ptr-operator声明符,&是一个ptr-operator),但在语义上它没有任何意义,这里不允许这样做.纯粹从语法角度来看它有效的事实可能表明Visual Studio可能接受它的原因.
检查可能性,此声明看起来像一个没有返回类型的函数定义.7 [dcl.dcl]/6说:"只有在构造函数,析构函数和类型转换的函数声明中才能省略decl-specifier-seq." 并且没有~或operator唯一可能的是构造函数声明.
12.1 [class.ctor]/1描述了用于构造函数的特殊声明符语法,它只能是一个可选的函数说明符序列,后跟构造函数的类名.没有&或其他PTR运营商将在构造函数的类名前允许.