Подтвердить что ты не робот

Почему это объявление const const const действительно

Друг попросил меня объяснить, почему

const const const const const int const i = 0;

- действительный синтаксис. Я отказался от каких-либо соображений по этому вопросу. Хотя мне интересно, если это всего лишь грамматика?

Изменить. Тег - это С++, мой друг ссылался на gcc, поэтому я, вероятно, должен добавить тег C.

4b9b3361

Ответ 1

От n1256:

6.7.3/4

Если один и тот же квалификатор появляется более одного раза в одном и том же конкретный список квалификаторов, либо напрямую, либо через один или несколько typedefs, поведение такое же, как если бы оно появилось только один раз.

В С++ это должно привести к ошибке.

Из стандарта С++ 03:

7.1.5/1 [dcl.type]

Как правило, не более одного типа-спецификатора допускается в полный decl-specifier-seq декларации. Исключения из это правило:

- const или volatile может быть объединен с любым другим спецификатором типа. Однако избыточные cv-квалификаторы запрещены, за исключением случаев, когда они вводятся с использованием аргументов typedefs (7.1.3) или типа шаблона (14.3), и в этом случае избыточные cv-квалификаторы игнорируются.

От N3797 (С++ 11):

7.1.6/2 [dcl.type]

В качестве общего правила допускается не более одного типа спецификаций в полный decl-spec-fi-seq декларации или в типе-spec-fi-seq или спецификатор типа "конечный тип". Единственными исключениями из этого правила являются: следующее:

— const can be combined with any type specifier except itself.