2013-12-12 18 views
19

Znajomy poprosił mnie o wyjaśnienie, dlaczegoDlaczego jest to ważna deklaracja const const const

const const const const const int const i = 0; 

jest prawidłowa składnia. Odmówiłem wszelkich przemyśleń na ten temat. Chociaż jestem ciekawy, czy to tylko kwestia gramatyki?

Edytuj. Tag to C++, mój przyjaciel odwoływał się do gcc, więc prawdopodobnie powinienem dodać tag C.

+4

[. To nie] (http://coliru.stacked-crooked.com/a/77773912987e1506) –

+0

@GuilhermeBernal, przedmiot jest znakowany C++ , a nie C. -1 – lucas92

+3

@ Konrad. To jest poprawne C, ale nieprawidłowe C++. (nie zamierzał usunąć) –

Odpowiedz

28

Od n1256:

6.7.3/4

Jeżeli ten sam zakwali fi er pojawia się więcej niż raz w tym samym specy fi er-quali fi er-listy, bezpośrednio lub za pośrednictwem jednego lub większej liczby typedefs, zachowanie jest takie samo, jak gdyby pojawiało się tylko raz.

W języku C++ powinno to spowodować błąd.

z C++ 03 standardzie:

7.1.5/1 [dcl.type]

Zgodnie z ogólną zasadą, co najwyżej jednego typu specyfikacją jest dozwolone w całkowitego decl- specifier-seq zgłoszenia. Jedynymi wyjątkami od tej reguły są:

- const lub volatile można łączyć z dowolnym innym specyfikatorem. Jednak redundantne kwalifikatory cv są zabronione, z wyjątkiem przypadków, gdy są wprowadzane przy użyciu typedefs (7.1.3) lub argumentów typu szablonu (14.3), w którym to przypadku zbędne kwalifikatory cv są ignorowane.

Z N3797 (C++ 11):

7.1.6/2 [dcl.type]

Zgodnie z ogólną zasadą, co najwyżej jedno typu wyspecyfikowanego fi er pozostawia się w kompletna specyfikacja dekl deklaracji lub specyfikatora typu lub specyfikacja specyficzna dla ciągnięcia wstecznego. Jedynymi wyjątkami od tej reguły są następujące:

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

To samo z '&', wierzę. 'typedef int & t; typedef t & u;' będzie oznaczać 'u' i' t' są tego samego typu. (Uwaga na literał '&&' choć, to C++ 11) –

Powiązane problemy