锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
浣滆匤uKevin
1. const淇グ鏅氬彉閲忓拰鎸囬拡
const淇グ鍙橀噺錛屼竴鑸湁涓ょ鍐欐硶錛?/span>
const TYPE value;
TYPE const value;
榪欎袱縐嶅啓娉曞湪鏈川涓婃槸涓鏍風(fēng)殑銆?/span>瀹冪殑鍚箟鏄細(xì)const淇グ鐨勭被鍨嬩負(fù)TYPE鐨勫彉閲?/span>value鏄笉鍙彉鐨勩?/span>
瀵逛簬涓涓潪鎸囬拡鐨勭被鍨?/span>TYPE錛屾棤璁烘庝箞鍐欙紝閮芥槸涓涓惈涔夛紝鍗?/span>value鍙笉鍙彉銆?/span>
渚嬪錛?/span>
const int nValue錛?/span> //nValue鏄?/span>const
int const nValue錛?/span> // nValue鏄?/span>const
浣嗘槸瀵逛簬鎸囬拡綾誨瀷鐨?/span>TYPE錛屼笉鍚岀殑鍐欐硶浼?xì)鏈変笉鍚屾儏鍐靛Q屼緥濡傦細(xì)
A. const char *pContent;
B. char * const pContent;
C. char const *pContent;
D. const char* const pContent;
瀵逛簬鍓嶄笁縐嶅啓娉曪紝鎴戜滑鍙互鎹釜鏂瑰紡錛岀粰鍏跺姞涓婃嫭鍙?/span>
A. const (char) *pContent;
B. (char*) const pContent;
C. (char) const *pContent;
榪欐牱灝變竴鐩簡(jiǎn)鐒躲傛牴鎹浜?/span>const淇グ闈炴寚閽堝彉閲忕殑瑙勫垯錛屽緢鏄庢樉錛?/span>A=C.
- 瀵逛簬A,C, const淇グ鐨勭被鍨嬩負(fù)char鐨勫彉閲?/span>*pContent涓哄父閲忥紝鍥犳錛?/span>pContent鐨勫唴瀹逛負(fù)甯擱噺涓嶅彲鍙?/span>.
- 瀵逛簬B, 鍏跺疄榪樻湁涓縐嶅啓娉曪細(xì) const (char*) pContent;
鍚箟涓猴細(xì)const淇グ鐨勭被鍨嬩負(fù)char*鐨勫彉閲?/span>pContent涓哄父閲忥紝鍥犳錛?/span>pContent鎸囬拡鏈韓涓哄父閲忎笉鍙彉.
- 瀵逛簬D, 鍏跺疄鏄?/span>A鍜?/span>B鐨勬販鍚堜綋錛岃〃紺烘寚閽堟湰韜拰鎸囬拡鍐呭涓よ呯殕涓哄父閲忎笉鍙彉
鎬葷粨:
(1) 鎸囬拡鏈韓鏄父閲忎笉鍙彉
(char*) const pContent;
const (char*) pContent;
(2) 鎸囬拡鎵鎸囧悜鐨勫唴瀹規(guī)槸甯擱噺涓嶅彲鍙?/span>
const (char) *pContent;
(char) const *pContent;
(3) 涓よ呴兘涓嶅彲鍙?/span>
const char* const pContent;
榪樻湁鍏朵腑鍖哄埆鏂規(guī)硶錛?/span>
娌跨潃*鍙峰垝涓鏉$嚎錛?/span>
濡傛灉const浣嶄簬*鐨勫乏渚э紝鍒?/span>const灝辨槸鐢ㄦ潵淇グ鎸囬拡鎵鎸囧悜鐨勫彉閲忥紝鍗蟲寚閽堟寚鍚戜負(fù)甯擱噺錛?/span>
濡傛灉const浣嶄簬*鐨勫彸渚э紝const灝辨槸淇グ鎸囬拡鏈韓錛屽嵆鎸囬拡鏈韓鏄父閲忋?/span>
2. const淇グ鍑芥暟鍙傛暟
const淇グ鍑芥暟鍙傛暟鏄畠鏈騫挎硾鐨勪竴縐嶇敤閫旓紝瀹冭〃紺哄嚱鏁頒綋涓笉鑳戒慨鏀瑰弬鏁扮殑鍊?/span>(鍖呮嫭鍙傛暟鏈韓鐨勫兼垨鑰呭弬鏁板叾涓寘鍚殑鍊?/span>)銆傚畠鍙互寰堝ソ
void function(const int Var); //浼犻掕繃鏉ョ殑鍙傛暟鍦ㄥ嚱鏁板唴涓嶅彲浠ユ敼鍙?/span>(鏃犳剰涔夛紝鍥犱負(fù)Var鏈韓灝辨槸褰㈠弬)
void function(const char* Var); //鍙傛暟鎸囬拡鎵鎸囧唴瀹逛負(fù)甯擱噺涓嶅彲鍙?/span>
void function(char* const Var); //鍙傛暟鎸囬拡鏈韓涓哄父閲忎笉鍙彉(涔熸棤鎰忎箟錛?/span> 鍥犱負(fù)char* Var涔熸槸褰㈠弬)
鍙傛暟涓哄紩鐢紝涓轟簡(jiǎn)澧炲姞鏁堢巼鍚屾椂闃叉淇敼銆?/span>
淇グ寮曠敤鍙傛暟鏃訛細(xì)
void function(const Class& Var);//寮曠敤鍙傛暟鍦ㄥ嚱鏁板唴涓嶅彲浠ユ敼鍙?/span>
void function(const TYPE& Var); //寮曠敤鍙傛暟鍦ㄥ嚱鏁板唴涓哄父閲忎笉鍙彉
3. const 淇グ鍑芥暟榪斿洖鍊?/span>
const淇グ鍑芥暟榪斿洖鍊煎叾瀹炵敤鐨勫茍涓嶆槸寰堝錛屽畠鐨勫惈涔夊拰const淇グ鏅氬彉閲忎互鍙?qiáng)鎸囬拡鐨勫惈涔夊熀鏈浉鍚屻?/span>
(1) const int fun1() 榪欎釜鍏跺疄鏃犳剰涔夛紝鍥犱負(fù)鍙傛暟榪斿洖鏈韓灝辨槸璧嬪箋?/span>
(2) const int * fun2()
璋冪敤鏃?/span> const int *pValue = fun2();
鎴戜滑鍙互鎶?/span>fun2()鐪嬩綔鎴愪竴涓彉閲忥紝閭d箞灝辨槸鎴戜滑涓婇潰鎵璇寸殑1.(1)鐨勫啓娉曪紝鍗蟲寚閽堝唴瀹逛笉鍙彉銆?/span>
(3) int* const fun3()
璋冪敤鏃?/span> int * const pValue = fun2();
鎴戜滑鍙互鎶?/span>fun2()鐪嬩綔鎴愪竴涓彉閲忥紝閭d箞灝辨槸鎴戜滑涓婇潰鎵璇寸殑1.(2)鐨勫啓娉曪紝鍗蟲寚閽堟湰韜笉鍙彉銆?/span>
4. const淇グ綾誨璞?/span>/瀵硅薄鎸囬拡/瀵硅薄寮曠敤
const淇グ綾誨璞¤〃紺鴻瀵硅薄涓哄父閲忓璞★紝鍏朵腑鐨勪換浣曟垚鍛橀兘涓嶈兘琚慨鏀廣傚浜庡璞℃寚閽堝拰瀵硅薄寮曠敤涔熸槸涓鏍楓?/span>
const淇グ鐨勫璞★紝璇ュ璞$殑浠諱綍闈?/span>const鎴愬憳鍑芥暟閮戒笉鑳借璋冪敤錛屽洜涓轟換浣曢潪const鎴愬憳鍑芥暟浼?xì)鏈変慨鏀规垚鍛樺彉閲忕殑浼佸浘銆?/span>
渚嬪錛?/span>
class AAA
{
void func1();
void func2() const;
}
const AAA aObj;
aObj.func1(); ×
aObj.func2(); 姝g‘
const AAA* aObj = new AAA();
aObj->func1(); ×
aObj->func2(); 姝g‘
5. const淇グ鎴愬憳鍙橀噺
const淇グ綾葷殑鎴愬憳鍑芥暟錛岃〃紺烘垚鍛樺父閲忥紝涓嶈兘琚慨鏀癸紝鍚屾椂瀹冨彧鑳藉湪鍒濆鍖栧垪琛ㄤ腑璧嬪箋?span lang=EN-US>
class A
{
…
const int nValue; //鎴愬憳甯擱噺涓嶈兘琚慨鏀?span lang=EN-US>
…
A(int x): nValue(x) {}; //鍙兘鍦ㄥ垵濮嬪寲鍒楄〃涓祴鍊?span lang=EN-US>
}
6. const淇グ鎴愬憳鍑芥暟
const淇グ綾葷殑鎴愬憳鍑芥暟錛屽垯璇ユ垚鍛樺嚱鏁頒笉鑳戒慨鏀圭被涓換浣曢潪const鎴愬憳鍑芥暟銆備竴鑸啓鍦ㄥ嚱鏁扮殑鏈鍚庢潵淇グ銆?/span>
class A
{
…
void function()const; //甯告垚鍛樺嚱鏁?span lang=EN-US>, 瀹冧笉鏀瑰彉瀵硅薄鐨勬垚鍛樺彉閲?span lang=EN-US>. 涔熶笉鑳借皟鐢ㄧ被涓換浣曢潪const鎴愬憳鍑芥暟銆?span lang=EN-US>
}
瀵逛簬const綾誨璞?/span>/鎸囬拡/寮曠敤錛屽彧鑳借皟鐢ㄧ被鐨?/span>const鎴愬憳鍑芥暟錛屽洜姝わ紝const淇グ鎴愬憳鍑芥暟鐨勬渶閲嶈浣滅敤灝辨槸闄愬埗瀵逛簬const瀵硅薄鐨勪嬌鐢ㄣ?/span>
7. const甯擱噺涓?/span>define瀹忓畾涔夌殑鍖哄埆
(1) 緙栬瘧鍣ㄥ鐞嗘柟寮忎笉鍚?/span>
define瀹忔槸鍦ㄩ澶勭悊闃舵灞曞紑銆?/span>
const甯擱噺鏄紪璇戣繍琛岄樁孌典嬌鐢ㄣ?/span>
(2) 綾誨瀷鍜屽畨鍏ㄦ鏌ヤ笉鍚?/span>
define瀹忔病鏈夌被鍨嬶紝涓嶅仛浠諱綍綾誨瀷媯(gè)鏌ワ紝浠呬粎鏄睍寮銆?/span>
const甯擱噺鏈夊叿浣撶殑綾誨瀷錛屽湪緙栬瘧闃舵浼?xì)鎵ц绫诲瀷妫鏌ャ?/span>
(3) 瀛樺偍鏂瑰紡涓嶅悓
define瀹忎粎浠呮槸灞曞紑錛屾湁澶氬皯鍦版柟浣跨敤錛屽氨灞曞紑澶氬皯嬈★紝涓嶄細(xì)鍒嗛厤鍐呭瓨銆?/span>
const甯擱噺浼?xì)鍦ㄥ唴瀛樹腑鍒嗛?/span>(鍙互鏄爢涓篃鍙互鏄爤涓?/span>)銆?/span>