?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???? ?? ??
??個人主頁 :阿然成長日記 ??點擊可跳轉(zhuǎn)
?? 個人專欄: ??數(shù)據(jù)結(jié)構(gòu)與算法??C語言進(jìn)階
?? 不能則學(xué),不知則問,恥于問人,決無長進(jìn)
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??
引用:
const關(guān)鍵字是永恒不變的意思,用它修飾的關(guān)鍵字只具有度的特性,沒有辦法進(jìn)行寫操作。const常變量只在編譯期有用,在運行期無用,可以很好的增加程序的健壯性,防止一些不必要的變量被錯誤修改引發(fā)的程序問題。const修飾的變量是只讀的,本質(zhì)還是變量。
現(xiàn)代C編譯器(如Vc、gcc)中的const將具有全局生命周期(如全局變量,static屬性的變量)存儲于只讀存儲區(qū),修改該變量時將導(dǎo)致程序崩潰。【注意】標(biāo)準(zhǔn)C語言編譯器(如bcc)不會被const修飾的全局變量存儲于只讀存儲區(qū),而是存儲于可修改的全局?jǐn)?shù)據(jù)區(qū),其值依然可以改變。
一、const修飾范圍
(1)定義常量,和define語句類似。但是相比較而言,使用const在很多編譯器中是不會給分配空間的,這樣可以大大減少內(nèi)存的使用量。
(2)const修飾函數(shù)形參。const類型變量必須定義的時候進(jìn)行初始化,因此也導(dǎo)致如果類的成員變量有const類型的變量,那么該變量必須在類的初始化列表中進(jìn)行初始化;
(3)const可以修飾形參,表明它是一個輸入?yún)?shù),在函數(shù)內(nèi)部不能改變其值。
(4)修飾函數(shù)返回值。參數(shù)可以直接賦值給一個常量或者指針。const修飾函數(shù)返回值表示返回值不可改變,多用于返回指針
的情形。
(5)修飾成員函數(shù),形參后加const,其實是用來修飾this指針,使其變?yōu)槌A恐羔?,使得在該成員函數(shù)中不能對類的任何成員進(jìn)行修改
二、const修飾指針,常量,
1.情況一
首先,我們要清楚, int* const pa = &a;中的
pa
是一個指針,而*pa
是指針的解引用,是指針指向的值。
int* const pa = &a;
可以發(fā)現(xiàn)【pa = &b;】直接對pa的內(nèi)容修改是不行的。但是【*pa = b;】可以通過指針去修改其內(nèi)容。也就是說,const此時修飾的是pc
。
情況二
const int *pa = &a;
可以發(fā)現(xiàn)【pa = &b;】直接對pa的內(nèi)容修改是可以的。但是【*pa = b;】不可以通過指針去修改其內(nèi)容。也就是說,const此時修飾的是*pa
。
情況三
int const* pa = &a;
結(jié)果證明,這種const所處位置造成結(jié)果與情況二一致。
三、修飾類的成員函數(shù)
1.格式:
void Print()
const
{}
class Date
{
public:
Date(int year, int month, int day)
{
_year = year;
_month = month;
_day = day;
}
void Print() const
{
cout << "Print()" << endl;
cout << "year:" << _year << endl;
cout << "month:" << _month << endl;
cout << "day:" << _day << endl << endl;
}
private:
int _year; // 年
int _month; // 月
int _day; // 日
};
這里的const修飾形參中的隱藏參數(shù)相當(dāng)于Date *const
this。
2.為什么要使用const修飾成員函數(shù)?修飾的是誰?
答:(1)首先我們要清楚,類的成員函數(shù)中才會存在this指針。this指針是一個指向當(dāng)前對象的指針,只有在成員函數(shù)中才有定義。this指針一般都是隱藏的,存在于形參列表的最左邊。
(2)const修飾this指針指向的對象,這也就保證調(diào)用這個const成員函數(shù)的對象在內(nèi)部不會被改變
注意:
-
非成員函數(shù)
,沒有this指針,不能使用const修飾。
總結(jié),如果成員函數(shù)不需要修改成員變量,最好加上const。反之,如果成員函數(shù)需要修改成員變量,那么久不能加const。cosnt修飾*this。文章來源:http://www.zghlxwxcb.cn/news/detail-771538.html
3.函數(shù)訪問時的權(quán)限問題
允許原則: 權(quán)限平移,權(quán)限縮小,不能權(quán)限放大。文章來源地址http://www.zghlxwxcb.cn/news/detail-771538.html
- 非const對象都可以訪問const對象,權(quán)限縮小。
- const對象可以訪問const對象,權(quán)限平移。
- const對象不能訪問非const對象,會造成權(quán)限放大。
到了這里,關(guān)于【C++】const關(guān)鍵字的詳解?。〉奈恼戮徒榻B完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!