2013-01-20 119 views
4

如果我在一個類中作爲數據成員讀取它,那麼static是指整個表達式(數組本身)還是數組的元素?static const arrays

static const int* array[100];

是數組,array,靜態,還是數組包含100 static const int pointers

我假設前者,但字const改變含義的方式讓我懷疑static也基於它存在的表達式中的位置而改變含義。在上面,指針array不是const,但數組的元素是const,所以我不知道數組的指針是否爲static

+0

你確定嗎? 'const int * const array [100]'將確保一個常量數組 – johnbakers

+0

http://www.cprogramming.com/reference/pointers/const_pointers.html – thang

+0

@KhalidTaha查看其他答案;你的評論是不準確的 – johnbakers

回答

2

static,externregister適用於您聲明的變量,在本示例中爲array

因此,你會得到一個100個指向恆定整數的靜態數組。

+0

通過常量整數,你的意思是他們不能通過數組的指針進行修改,對吧? – legends2k

+0

@ legends2k正確。 –

+2

挺好的。可能更正確,因爲「它們不能通過數組中的指針進行修改」。它們不能通過數組的指針進行修改,因爲數組的指針對數組中的指針沒有影響。 – thang

4

C++ 11點7.1.1存儲類聲明:
§5

static聲明只能應用到的變量和函數的名稱,並以匿名聯合(9.5)。 塊中不能有靜態函數聲明,也不能有任何靜態函數參數。 變量聲明中使用的靜態 說明符聲明該變量具有靜態存儲持續時間(3.7.1), 除非伴隨thread_local說明符聲明該變量具有線程存儲 持續時間(3.7.2) 。靜態指定符可以用於類成員的聲明中; 9.4描述了它的效果。 對於用靜態指定符聲明的名稱的鏈接,請參見3.5。

那麼你在代碼示例中聲明瞭什麼?

static const int* array[100]; 

很顯然,你是在聲明變量array所以static適用於array
不要混淆存儲類說明CV-預選賽前者適用於聲明的變量之中,而後者適用於的類型。

+0

+1有用的信息cv-quals和存儲說明符。 – legends2k

+1

我通常反對引用標準。但是,如果問題是關於如此謹慎的(某些人的)微妙的區別,引用標準是正確的。 – Omnifarious