C++中const關(guān)鍵字的用法圖文詳解
C語言和C++中const的不同
首先我們需要區(qū)分一下C語言中的const和C++中的const,C語言中的const修飾的變量可以不初始化,但如果將一個變量定位為const類型還不初始化,那么之后就不能對這個變量直接賦值了。
如果我們使用C語言中的const定義的變量指定數(shù)組的大小,那么就會直接報錯,因為數(shù)組大小的初始化必須是一個常量,實際上在C語言中,const確實不是用來定義一個常量的,而是用來定義一個常變量的,只是這個變量的值不能被直接修改(通過指針還是可以修改這塊內(nèi)存的值的),除此之外這個變量和其他的C語言的變量沒什么區(qū)別,甚至連編譯生成指令的方式都是一樣的。
但是在C++中,const就是真正用來定義一個常量的,不進行初始化就會直接報錯。
這主要是因為常量的編譯方式和變量的編譯方式不同,常量在編譯階段會將整個程序中這個常量的名稱都替換為這個常量的值,那么如果你在定義一個常量的時候,還不進行初始化的話,編譯器就不知道要替換為什么值,自然就會直接報錯了。
用C++中的const修飾的變量可以初始化數(shù)組的大小,也說明了這個變量實際上是一個常量。
當然了既然已經(jīng)用const修飾作為常量了,那么這個變量就不能作為左值來使用了,畢竟你不能修改一個常量的值嘛。
如果你按照下面這種方式在C++中定義一個const類型的變量,那么這個變量就直接退化為了C語言中的常變量了。
int a = 10; const int p = a; return 0;
C++中的const配合一級指針使用
一般來說,在C++中const配合一級指針使用有四種形式。
const int *p int const* p; int* const p; const int* const p;
const的修飾作用
那么很多人其實分不清這上面四種const用法所產(chǎn)生的效果,實際上,在C++中const修飾的是離它最近的類型。
比如const int *p,這個const顯然修飾的是int類型,也就是*p,p本身是一個int*類型的,*p就是int類型嘛,代表*p不能被改變。
int const *p,這個const離int最近,所以也是修飾int類型,同樣是*p,代表*p不能被改變,也就是指針所指向的值不能改變。
int *const p的const就是離int *最近了,所以修飾的是int*類型,也就是p,代表p所指向的地址不能改變。
const int * const p有兩個const,離第一個const最近的是int,離第二個const最近的是int *,所以第一個const修飾的是*p,代表*p不能改變,第二個const修飾的是p,代表p不能改變,所以呢,這個指針所指向的值不能被修改,指向的地址也不能被修改。
const的類型轉(zhuǎn)換
對于const的類型轉(zhuǎn)換,我們需要知道一個原則,那就是const的右邊如果沒有指針符號的話,const不參與類型之中。
int* q; int* const p; const int* w;
int *q的類型是int *,int *const p的類型也是int *,因為const的右邊沒有*號,所以const不參與類型中,而const int *w的類型就是const int*了,因為const的右邊存在*號。
另外呢,從int *是可以轉(zhuǎn)換到const int *的,但是const int *不能轉(zhuǎn)換為int *,否則不就代表你可以修改這個指針所指向的值了嗎。
到此這篇關(guān)于C++中const關(guān)鍵字用法的文章就介紹到這了,更多相關(guān)C++ const關(guān)鍵字用法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
關(guān)于c++ 智能指針及 循環(huán)引用的問題
下面小編就為大家?guī)硪黄P(guān)于c++ 智能指針及 循環(huán)引用的問題。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-01-01深入分析C語言中結(jié)構(gòu)體指針的定義與引用詳解
本篇文章是對C語言中結(jié)構(gòu)體指針的定義與引用進行了詳細的分析介紹,需要的朋友參考下2013-05-05