菜鳥不哭固翰!只需這一次,徹底搞懂const

本文寫作時長4小時


const是一種限定符羹呵,對變量的類型加以限定骂际,使其成為不可變的變量,也就是常量冈欢。在這里歉铝,有必要說明一下,本文討論的變量和常量并不完全對立涛癌。C++中犯戏,所有具名的、可供程序操作的存儲空間拳话,統(tǒng)稱為變量(variable)先匪,常量就是加了限定符const的變量。

由于const是對變量的類型加以限定弃衍,所以我們主要從變量類型入手分類討論

const限定基本內(nèi)置類型

C++基本內(nèi)置類型包含算術(shù)類型和void類型呀非,算術(shù)類型就是老生常談的整型和實型,不往下細說了

定義一個const變量(常量):

const int bufferSize = 128;//常量定義時必須要初始化
bufferSize = 256;//錯誤镜盯,常量初始化后岸裙,不可賦值

常量的初始化時機有兩種:

const int bufferSize = 128;//編譯時初始化
const int bufferSize = buffer_size();//運行時初始化

這種const很簡單,直來直去

const限定復(fù)合類型

復(fù)合類型包括引用速缆,指針等降允,暫時只討論這兩種

const和引用

在談?wù)?code>const和引用之前,一定要明白艺糜,引用本身不是變量剧董,不是對象幢尚,初始化引用就是把引用和初始值綁定在一起,而非拷貝翅楼。引用即別名(一個已經(jīng)存在的變量的另外一個名字)尉剩。引用的類型由它所引用的類型決定。

對非const變量的引用(普通引用)

int i = 1;
int &ri = i;

對const變量(常量)的引用(引用常量的引用)

const int i = 1;
const int &ri = i;

const修飾的引用我們稱之為常引用毅臊,這其實是不準確的理茎,因為常引用從字面上理解,就是不能再次引用其他變量的引用管嬉,這很容易引起誤解皂林,因為引用本身就是這樣的特點,所以本文不稱為常引用蚯撩,叫引用常量的引用式撼,或者稱作只讀引用

引用常量的引用意義在于求厕,不能通過這個引用修改引用綁定的變量的值。

假如用普通引用引用const變量(常量)

const int i = 1;
int &ri = i;//錯誤扰楼,i是常量呀癣,ri必須是常引用

這個例子就是,我說了弦赖,這個值不能變项栏,而你卻總想動個歪腦筋,說這個值可以變蹬竖,你幾個意思沼沈,給我乖乖加上const!

假如用引用常量的引用引用非const變量

int i = 1;
const int &ri = i;

i是變量币厕,而ri本身的意思卻是引用一個常量列另,這樣是可以的,只是通過ri無法改變i的值旦装,而通過i還是可以改變自身的值页衙。這樣做的唯一影響的就是無法通過引用改變綁定變量的值。ri自以為是的認為所綁定的變量是個常量阴绢。

那么店乐,經(jīng)過實踐,我們下一個結(jié)論:
雖然只讀引用是對常量的引用呻袭,但是編譯器不會阻止你用只讀引用引用變量眨八,這么做的唯一影響就是通過這個常引用無法修改綁定變量的值,也就是說只讀引用中的const只對引用進行限定左电。但是別搞混了廉侧,引用常量必須用只讀引用页响。

const和指針

普通指針

int i = 1;
int *pi = &i;

i自身是變量,通過指針pi也可以修改i的值伏穆,pi也可以再次指向其他變量

指向const變量的指針

const int i = 1;
const int *pi = &i;

判斷一個變量的類型時拘泞,從變量名從右向左看,首先枕扫,*指示pi是一個指針陪腌,const int指示pi是一個指向const變量的指針。和引用類型一樣烟瞧,指向const變量的指針必須被聲明為const(*號左側(cè))诗鸭,pi仍然可以再次指向其他變量。

用普通指針指向const類型

const int i = 1;
int *pi = &i;

居心叵測参滴,行為不良强岸!為了避免嫌疑,請加上const

用只讀指針指向非const變量

int i = 1;
const int *pi = &i;

比較自覺砾赔,一身正氣蝌箍,有原則,唯一影響就是pi是個只讀指針

const指針
指針和引用不同暴心,指針本身是個變量(對象)妓盲,可以定義const指針,也就是常量指針

int i = 1;
int j = 2;
int * const pi = &i;//pi永遠指向i
pi = &j;//錯誤专普,指向i了就不能再指向別的變量了

同樣地悯衬,從右向左讀,pi是變量名檀夹,const修飾pi筋粗,表明pi本身是一個常量,int *指示pi是一個指向int的常量指針炸渡。雖然不能再次指向別的變量娜亿,但是可以通過這個指針修改指向的變量值。

指向常量的常量指針

const int i = 1;
const int * const pi = &i;

pi自身是常量偶摔,指向也是常量

總結(jié):

  1. const 修飾基本類型時暇唾,const變量不可修改(再次被賦值)
  2. const 修飾引用時,const引用(命名不準確辰斋,只讀引用比較合適)可以引用常量和變量策州,只是無法通過只讀引用去修改值,而常量只能被只讀引用引用宫仗。(由于引用非變量够挂,所以不存在const引用,又或者說引用本身就是const
  3. const 修飾指針時藕夫,const指針(常量指針)不可以再次指向其他變量孽糖,但是可以修改指向的變量的值枯冈,而指向const變量的指針,不可以通過指針修改指向變量的值办悟,但是可以再次指向其他的變量尘奏。而指向const變量的const指針則什么都不能改變了。

說明:只讀指針 指不能通過這個指針修改指向的內(nèi)容

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末病蛉,一起剝皮案震驚了整個濱河市炫加,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌铺然,老刑警劉巖俗孝,帶你破解...
    沈念sama閱讀 216,919評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異魄健,居然都是意外死亡赋铝,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,567評論 3 392
  • 文/潘曉璐 我一進店門沽瘦,熙熙樓的掌柜王于貴愁眉苦臉地迎上來革骨,“玉大人,你說我怎么就攤上這事析恋】疗眩” “怎么了?”我有些...
    開封第一講書人閱讀 163,316評論 0 353
  • 文/不壞的土叔 我叫張陵绿满,是天一觀的道長。 經(jīng)常有香客問我窟扑,道長喇颁,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,294評論 1 292
  • 正文 為了忘掉前任嚎货,我火速辦了婚禮橘霎,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘殖属。我一直安慰自己姐叁,他們只是感情好,可當我...
    茶點故事閱讀 67,318評論 6 390
  • 文/花漫 我一把揭開白布洗显。 她就那樣靜靜地躺著外潜,像睡著了一般。 火紅的嫁衣襯著肌膚如雪挠唆。 梳的紋絲不亂的頭發(fā)上处窥,一...
    開封第一講書人閱讀 51,245評論 1 299
  • 那天,我揣著相機與錄音玄组,去河邊找鬼滔驾。 笑死谒麦,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的哆致。 我是一名探鬼主播绕德,決...
    沈念sama閱讀 40,120評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼摊阀!你這毒婦竟也來了耻蛇?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,964評論 0 275
  • 序言:老撾萬榮一對情侶失蹤驹溃,失蹤者是張志新(化名)和其女友劉穎城丧,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體豌鹤,經(jīng)...
    沈念sama閱讀 45,376評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡亡哄,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,592評論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了布疙。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蚊惯。...
    茶點故事閱讀 39,764評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖灵临,靈堂內(nèi)的尸體忽然破棺而出截型,到底是詐尸還是另有隱情,我是刑警寧澤儒溉,帶...
    沈念sama閱讀 35,460評論 5 344
  • 正文 年R本政府宣布宦焦,位于F島的核電站,受9級特大地震影響顿涣,放射性物質(zhì)發(fā)生泄漏波闹。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,070評論 3 327
  • 文/蒙蒙 一涛碑、第九天 我趴在偏房一處隱蔽的房頂上張望精堕。 院中可真熱鬧,春花似錦蒲障、人聲如沸歹篓。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,697評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽庄撮。三九已至,卻和暖如春毙籽,著一層夾襖步出監(jiān)牢的瞬間重窟,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,846評論 1 269
  • 我被黑心中介騙來泰國打工惧财, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留巡扇,地道東北人扭仁。 一個月前我還...
    沈念sama閱讀 47,819評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像厅翔,于是被迫代替她去往敵國和親乖坠。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,665評論 2 354

推薦閱讀更多精彩內(nèi)容