;這裡會呼叫string類的預設建構函式初始化陣列元素。
const
int* cur;
這裡的cur是乙個指向int型別的const物件的指標,const先頂了cur指向的物件的型別,而並非cur本身,所以cur不是const的
const
double
* cur;
const
double pur =
1.2;
cur =
&pur;
const指標:
int pur =10;
int*
const cur =
&pur;
上述語句被稱為「指向int型物件的const指標」
class
stack
;int stack::
getcount()
const
;
void
print()
;void
print()
const
;int
main()
const物件對應const函式。
//無實際意義,引數返回值就是賦值
const
intfun1()
;//const int* cur = fun1();
//我們可以把fun2()看成是乙個變數,指標內容不可變
const
int*
fun2()
;//int* const fun3();
//把fun2()看成是乙個變數,指標型別不可變
int*
const
fun3()
;
//傳遞過來的引數在函式內不可以改變(無意義,因為var本身就是形參)
void
fun(
const
int key)
;//引數指標所指向的內容不可變
void
fun(
const
int* cur)
;//引數指標本身不可變(無意義,cur本事是形參)
void
fun(
int*
const cur)
;
const修飾引用引數
//引數為引用,為了增加效率同時防止修改。
void
fun(
const
int& cur)
;
const修飾的引數和普通的傳值是一樣的,他禁止對引用的物件的一切修改,唯一的不同的是按值傳遞會建立乙個類的物件副本,然後傳遞過去,而他是直接傳遞位址過去,增加了效率。
只用引用的const物件可以傳遞乙個臨時物件,因為臨時物件都是const屬性,不可見的,他短時間存在乙個作用域中,所以不能用指標,只用引用的const傳遞可以捕獲物件。
const加在不同的位置有不同的意義: int const cur 和 const int cur沒有區別
難點在於指標前後加const型別的判斷:
int b =
100;
const
int* a =
&b;//1
intconst
*a =
&b;//2
int*
const a =
&b;//3
const
int*
const a =
&b;//4
如果const位於* 的左側,則const修飾的是指標所指向的變數,即指標指向的物件是常量;如果const位於星號的右側,則const修飾的是指標的型別,即指標本身是常量。
因此 1 和 2 情況相同,都是修飾指標所指向的內容,(const在變數宣告符的前後無關),這種情況下不允許對內容進行修改如a = 3。
3 修飾的是指標,指標本身算個常量,而指標指向的內容不是常量,這種情況下不能對指標本身進行修改,這種情況下對指標本身進行更新修改,如a++是錯的。
4 指標本身和指向的內容均為常量。
全文參考:
const關鍵字
const關鍵字總結
被const修飾的變數是不能改變的 const修飾變數時,必須在宣告變數的同時給出初始化 類中的const成員變數不一樣 定義為變數本身是乙個常量,因此對一切的內建型別常量而言,所有的const都是頂層const 對指標來說,常量指標是頂層const,對於引用則沒有頂層const的概念。只在指標和引...
const關鍵字總結
const是乙個c語言的關鍵字,它限定乙個變數不允許被改變。使用const在一定程度上可以提高程式的健壯性,另外,在 別人 的時候,清晰理解const所起的作用,對理解對方的程式也有一些幫助。雖然這聽起來很簡單,但實際上,const的使用也是c語言中乙個比較微妙的地方,微妙在何處呢?請看下面幾個問題...
const關鍵字(摘抄 總結)
4.3.4 const關鍵字與指標 4.3.4.1 const修飾指標的4種形式 1 const關鍵字,在c語言用來修飾變數,表示這個變數是常量 2 const修飾指標有4種形式,區分清楚這4種即可全部理解const和指標 第一種 const int p p本身不是const的,而p指向的變數是co...