2010-11-08 24 views
10

Saw lo siguiente en algún código heredado:extraño

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

Qué "&" se utiliza para? Se compila en VC++ 2008 y se ve como el constructor predeterminado, error gcc no puede compilarlo.

Respuesta

7

Aunque sintácticamente & está permitido en esta posición en la gramática (que es un ejemplo de un declaradorque es la secuencia: declarador ptr-operador, & ser un ptr-operador), semánticamente no tiene significado y no está permitido aquí. El hecho de que sea válido puramente desde un punto de vista gramatical puede indicar por qué Visual Studio podría aceptarlo.

Al examinar las posibilidades, esta declaración se parece a una definición de función sin tipo de devolución. 7 [dcl.dcl]/6 dice: "Solo en las declaraciones de función para constructores, destructores y conversiones de tipo se puede omitir el decl-specifier-seq". y al no haber ~ o operator, la única posibilidad es una declaración de constructor.

12.1 [class.ctor]/1 describe la sintaxis especial del declarador utilizada para los constructores y solo debe ser una secuencia opcional de especificadores de función seguido del nombre de la clase del constructor. No & u otro ptr-operator está permitido antes del nombre de la clase del constructor.