Странный синтаксис конструктора по умолчанию - PullRequest
10 голосов
/ 08 ноября 2010

В следующем унаследованном коде увидел следующее:

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

Для чего используется «&»?Он компилируется в VC ++ 2008 и выглядит как конструктор по умолчанию, ошибка gcc не может его скомпилировать.

1 Ответ

7 голосов
/ 08 ноября 2010

Хотя синтаксически & разрешено в этой позиции в грамматике (это пример декларатора , который представляет собой последовательность: декларатор ptr-оператора , & является ptr-оператор ), семантически это не имеет смысла и здесь не допускается.Тот факт, что он действителен исключительно с грамматической точки зрения, может указывать, почему Visual Studio может его принять.

Изучая возможности, это объявление выглядит как определение функции без возвращаемого типа.7 [dcl.dcl] / 6 гласит: «Только в объявлениях функций для конструкторов, деструкторов и преобразований типов можно опустить decl-specier-seq ».и при отсутствии ~ или operator единственной возможностью является объявление конструктора.

12.1 [class.ctor] / 1 описывает специальный синтаксис объявления, используемый для конструкторов, и он должен быть только необязательной последовательностью спецификаторы функций , за которыми следует имя класса конструктора.* & или другие оператор ptr не допускаются перед именем класса конструктора.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...