2012-11-29 71 views
0

我已經知道const預選賽隻影響一個對象,但不是它的類型:const可以應用於類型嗎?

例如:

// Only the elements of an array are constant not the array itself 
const int a[5]; 

假設,如果我有:

float *const p1; // 1 
float const *p2; // 2 

在第一種情況下上面,這是否意味着指針類型是恆定的,而不是對象p1?當這些類型不合格時,這怎麼可能呢?

+1

「*我知道'const'限定符隻影響一個對象,但不是它的類型*」 - 這是錯誤的。 – melpomene

+0

@melpomene:例如?說const隻影響一個數組對象而不是它的類型是不正確的? – user963241

+0

這確實是不正確的。 – melpomene

回答

2
float *const p1; // 1 

意味着指針p1是恆定的,它不能(而不應該)指向另一個地址。
這是不是指針類型是恆定的,但這種類型的實例是p1是contant。

使用Clockwise spiral rule更好地理解這一點。

這種情況怎麼會發生,當這些類型不允許合格時?

這是不正確的。事實上,限定符是類型限定符(§6.7.3)

+0

由於指針是派生類型。這個陳述似乎與這裏有關嗎? _「(§6.2.5/26)派生類型不符合派生類型的限定符(如果有)。」_ – user963241

1

採用這種聲明的簡寫形式:

const int a[5]; 

一個的類型是「5個常量整數數組」。

採用這種聲明

float *const p1; 

P1具有輸入 「常量指針浮動」。

採用這種聲明

const float *p2; 

P2具有輸入 「指針爲const浮動」。

無法將數組聲明爲const,但無論如何不能改變數組。只有數組中的元素才能被更改。

相關問題