2016-01-14 38 views
0

我是新來的C++,並試圖學習指針的概念。我很困惑,爲什麼第一個和第四個語句會導致錯誤,而第一個和第二個語句工作正常。預先感謝任何幫助!爲什麼int * const p1;導致錯誤,而int * p1;工作得很好

int *p1; //Ok 
const int *p1;//Ok 
int *const p1; //error: default initialization of an object of const type 'int *const' 
const int *const p1; //error: default initialization of an object of const type 'const int *const' 

p.s--我明白,這是很好的做法,宣佈他們或至少設置其值爲nullptr或0。我問這個問題,因爲我想了解它背後的概念時初始化所有的指針。

+3

可能重複[爲什麼const變量必須立即初始化?](http://stackoverflow.com/questions/8440381/why-do-const-variables-have-to-be-initialized-right-遠) – Drop

回答

3

帶有頂級const的非班級類型必須在定義中初始化。

第3行和第4行有頂級const,意思是p1不能被修改。第2行沒有頂級const; p1可以被修改但它指向的int不能。

4

最後兩條語句聲明指針本身爲常量。你沒有給他們價值。這使得它們變得毫無用處,因爲它們永遠不會被改變(如果它們是堆棧或類成員變量,它們甚至沒有像NULL這樣的定義值,所以它們實際上是無用的)。

0

這不是一個好的做法。
您正在聲明幾個const指針int和const int(有關更多詳細信息,請參閱here),在這兩種情況下,您必須在定義它們時初始化它們。

相關問題