2013-12-12 24 views
19

ある友人がなぜこれのconstのconstのconst宣言が有効

const const const const const int const i = 0; 

は有効な構文である理由を説明するために私に尋ねました。私は主題について何か考えを持っていることを断った。私はそれが単なる文法なのかどうか不思議ですが?

編集。タグはC++で、私の友人がgccを参照していたので、おそらくCタグを追加するべきです。 n1256から

+4

【。そうでない](http://coliru.stacked-crooked.com/a/77773912987e1506) –

+0

@GuilhermeBernal、対象がタグ付けされているC++ 、ないC. -1 – lucas92

+3

@Konrad。これは有効なCですが、無効なC++です。 (削除するつもりはありません) –

答えて

28

6.7.3/4

同じクアリFiのERは同じ 特異的ER-クアリFi回線ER-リストで複数回表示された場合は、直接または一の以上のtypedefを経由して、 この動作は、1回だけ表示された場合と同じです。

C++では、これはエラーとなります。原則として

7.1.5/1 [dcl.type]

、最大1つの型指定子が 完全decl-で許可され:C++ 03標準から

指定子のseqを指定します。 の例外は次のとおりです。

- constまたはvolatileは他の型指定子と組み合わせることができます。ただし、typedefs(7.1.3)やテンプレート型引数(14.3)を使用して導入された場合を除き、冗長なcv修飾子は禁止されます。この場合、冗長なcv修飾子は無視されます。 N3797(C++ 11)から

:一般的なルールとして

7.1.6/2 [dcl.type]

、最大1つの型特異的ERがで許可され 宣言のdecl-specifi-seq、またはタイプ指定子の後ろに または末尾の型指定のseq。このルールの唯一の例外は、次 ある:

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

'&'と同じですが、私は信じています。 'typedef int & t; typedef t & u;'は 'u'と' t'が同じ型であることを意味します。 (リテラル '&&'を注意してください、それはC++ 11です) –

関連する問題