C++ 奇怪的默认构造函数语法

C++ 奇怪的默认构造函数语法,c++,visual-c++,C++,Visual C++,在一些遗留代码中看到了以下内容: class A { &A() { ... } } “和”是用来做什么的?它在VC++2008中编译,看起来像默认构造函数, bug gcc无法编译它。尽管语法中的这个位置在语法上允许使用&(这是一个声明符的示例,即顺序:ptr运算符声明符,&是ptr运算符),但在语义上它没有意义,在这里不允许使用。它完全从语法的角度来看是有效的这一事实可能表明VisualStudio可能会接受它 通过检查可能性,该声明看起来像一个没有返回类型的函数定义。7[d

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

class A {
    &A() { ... }
}
“和”是用来做什么的?它在VC++2008中编译,看起来像默认构造函数,
bug gcc无法编译它。

尽管语法中的这个位置在语法上允许使用
&
(这是一个声明符的示例,即顺序:ptr运算符声明符,
&
是ptr运算符),但在语义上它没有意义,在这里不允许使用。它完全从语法的角度来看是有效的这一事实可能表明VisualStudio可能会接受它

通过检查可能性,该声明看起来像一个没有返回类型的函数定义。7[dcl.dcl]/6说:“只有在构造函数、析构函数和类型转换的函数声明中才能使用decl说明符seq。”并且没有
~
运算符
唯一的可能性是构造函数声明

12.1[class.ctor]/1描述了用于构造函数的特殊声明器语法,它只能是一个可选的函数说明符序列,后跟构造函数的类名。构造函数的类名之前不允许使用
&
或其他ptr运算符