2013-12-12 117 views
19

有朋友問我解釋爲什麼爲什麼這個常量常量常量聲明中無效

const const const const const int const i = 0; 

是有效的語法。我拒絕對這個問題有任何想法。雖然我很好奇,如果它只是一個語法的東西?

編輯。標籤是C++,我的朋友正在引用gcc,所以我應該添加C標籤。

+4

[。這不是(http://coliru.stacked-crooked.com/a/77773912987e1506) –

+0

@GuilhermeBernal,個體標記C++ ,而不是C. -1 – lucas92

+3

@Konrad。它是有效的C但是無效的C++。 (無意刪除) –

回答

28

從n1256:

6.7.3/4

如果相同的合格音響ER出現在同一 SPECI音響ER-合格音響ER-列表不止一次,直接地或經由一個或一個以上的typedef, 的行爲與僅出現一次的行爲相同。

在C++中,這應該會給出錯誤。

從C++ 03標準:

7.1.5/1 [dcl.type]

作爲一般規則,至多一個類型說明符被允許在 完整decl-聲明的說明符序列。 此規則的唯一例外如下:

- const或volatile可以與任何其他類型說明符結合使用。但是,除了通過使用類型定義(7.1.3)或模板類型參數(14.3)引入外,多餘的cv-限定符是被禁止的,在這種情況下,忽略冗餘的cv限定符。

從N3797(C++ 11):

7.1.6/2 [dcl.type]

作爲一般規則,至多一個類型SPECI音響ER被允許在 完整的decl-speci fi er seq的聲明或在類型speci fi er seq 或trailing-type-spec-seq。唯一的例外是 如下:

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

與'&'一樣,我相信。 'typedef int & t; typedef t & u;'將表示'u'和't'是同一類型。 (雖然,小心文字'&&',那是C++ 11) –