1. @ const:
一、對於基本宣告
const int r=100;
//標準const變數宣告加初始化,編譯器經過型別檢查後直接用100在
編譯時替換
。二、對於指標
1. int x=10;
const int *r=&x;
//指標
指向的內容是常量
,r指向的內容不能夠通過r改變,但如果指向的內容是非const(例如x),內容可以通過自己(x)改變,而且r指標可以改變,可以指向其它的整形.
*r=*r+1; //no
x++; //yes
r=&y; //yes
2. int const *r=&x;
//與1完全相同
3. int * const r=&x;
//指標指向是常量
,不能修改去指向其它內容,但指向的內容可以修改
r=&y; no
*r=*r+1;yes
x++;yes
4.const int * const r=&x;
//綜合1、3用法,r是乙個指向常量的常量型指標,指標指向不能改變,指標內容不能改變, 如果指向的內容是非const(例如x),內容可以自身改變
r=&y;no
*r=*r+1;no
x++;yes
三、對於型別檢查
可以把非const物件賦予const指標,這樣就不能改變.
但是不能把const賦給非const指標
,除非先強制轉換
const int x=100;
int *p=(int*)&x;
*p++;
四、對於函式
1.void fuction1(const int r); //此處為引數傳遞const值,意義是
變數初值不能被函式改變
2.const int fuction1 (int); //此處返回const值,意思指
返回的原函式裡的
變數的初值不能被修改
,但是函式按值返回的
這個變數被製成副本
,能不能被修改就沒有了意義,它
可以被賦給任何的const或非const型別變數
,完全不需要加上這個const關鍵字
。3.class cx; //內部有建構函式,宣告如cx(int r =0)
cx fuction1 ()
const cx fuction2 ()
fuction1() = cx(1); //沒有問題,可以作為
左值呼叫
fuction2() = cx(1); //編譯錯誤,
const返回值禁止作為左值呼叫
。4.函式中指標的const傳遞和返回:
int f1 (const char *pstr); //作為傳遞的時候使
用const修飾可以保證不會通過這個指標來修改傳遞引數的初值
const char *f2();//意義是
函式返回的指標指向的物件是乙個const物件,它必須賦給乙個同樣是指向const物件的指標
const char * const f3(); //比上面多了乙個const,這個const的意義只是在他被用作左值時有效,它表明了這個指標除了指向const物件外,它本身也不能被修改,所以就
不能當作左值來處理
。五、對於類
1.首先,
對於const的成員變數,只能在建構函式裡使用
初始化成員列表
來初始化
,試圖在建構函式體內進行初始化const成員變數會引起編譯錯誤。初始化成員列表形如:
x:: x ( int ir ): r(ir) {} //假設r是類x的const成員變數
注意:類的構造和析構函式都不能是const函式
。2.建立了乙個const成員函式,但仍然想用這個函式改變物件內部的資料。(函式不能修改類的資料成員)
//假如有乙個叫做x的類,它有乙個int成員變數r,我們需要通過乙個const成員函式f( )來對這個r進行++r操作,**如下
void x::f( ) const
//通過this指標進行型別強制轉換實現
const用法總結
const的作用 const是c語言的一種關鍵字,起受保護,防止以外的變動的作用!可以修飾變數,引數,返回值,甚至函式體。const可以提高程式的健壯性,你只管用到你想用的任何地方。一 const修飾引數。const只能修飾輸入引數。1 如果輸入引數是指標型的,用const修飾可以防止指標被意外修改...
const用法總結
const修飾的常成員函式可以理解為是乙個 唯讀 函式。如果一定要修改常物件中的每個資料成員的值,對該資料成員函式宣告為mutable,如 mutable int count 把count宣告為可變資料成員,即可改變。情況1 const位於 號左邊,const修飾指標所指向的變數,即指標指向為常量,...
const用法總結
顧名思義 const 是常量的意思即用const修飾的都是不可變的。1.const的用法 1 定義常量 char arr hello world constchar const p arr const出現在 左邊表示被指物是常量,在右邊表示指標自身是常量。宣告迭代器為cosnt就像宣告指標一樣,因為...