У меня возникла проблема с осознанием очевидной двусмысленности в спецификации c ++ 0x, см. Также: http://www.nongnu.org/hcb/
Предположим, у нас есть код
void foo() {};
Лично я интерпретирую код как определение функции
, за которым следует пустое объявление
. Но, глядя на спецификацию грамматики, я бы сказал, что это можно так же легко интерпретировать как простое объявление
, которое является частью объявления блока
и, следовательно, упоминается ранее в список объявлений
...
Вот мое объяснение того, как это может быть проанализировано как простое объявление:
void foo() {};"
-> простое объявление
void
-> decl-спецификатор-seq - > спецификатор объявления -> спецификатор типа -> завершающий тип- спецификатор -> спецификатор простого типа
foo() {}
-> инициализирующий список-деклараторов -> инициализирующий-декларатор
foo()
-> декларатор-декларатор -> птр-декларатор -> noptr-декларатор
foo
-> декларатор-идентификатор -> .. .
()
-> параметры и квалификаторы
{}
-> инициализатор -> список инициализации в скобках
Таким образом, это должно быть возможно проанализировать как простое объявление.
Мне сказали, что 6,8 из спецификацию следует использовать для устранения неоднозначности в этом случае, но я не совсем понимаю, почему. Является ли простое объявление
выражением-оператором
, поскольку оно заканчивается ;
?