C++ const關(guān)鍵字使用

const定義常量

在c語言中,我們學(xué)習(xí)過可以使用#define來定義常量。但是#define的原理是簡單的替換,因此對于#define來說沒有類型檢查這回事。

c++中提供了const關(guān)鍵字,用const關(guān)鍵字修飾的變量其值是不能修改的,因此可以使用const關(guān)鍵字來替換#define,這有益于編譯器進(jìn)行類型檢查。

const關(guān)鍵字定義變量如下代碼所示:

#include<iostream>
using namespace std;
const int MAX = 1000;
const double PI = 3.14;
const char NAME[] = "yurui";
int main() {
    MAX = PI;//報錯
    int a = PI;//警告
    return 0;
}

如上程序所示,使用const關(guān)鍵字定義了MAXPI、NAME三個全局變量。

通過MAX = PI;對const修飾的變量進(jìn)行賦值時會報錯;通過int a = PI;進(jìn)行賦值時編譯系統(tǒng)會給出警告,提示類型不符合。

通過上面的例子,我們可以看出,通過使用const關(guān)鍵字修飾常量,在使用時編譯系統(tǒng)會進(jìn)行類型檢查。

const定義常量指針

通過const關(guān)鍵字定義常量指針,這樣就不能通過指針修改變量的值。

例如:

#include<iostream>
using namespace std;
int main() {
    int a = 10;
    const int* p = &a;
    *p = 10;//報錯
    a = 100;//正確
    return 0;
}

如上面的程序,定義常指針p,當(dāng)我們通過p去修改其所指向的值時,編譯器就會對其報錯。

但通過變量名還是可以修改其值,如a = 100;

另外,觀察下面代碼:

#include<iostream>
using namespace std;
int main() {
    const int* a;
    int* b;
    a = b;//正確
    b = a;//錯誤
    return 0;
}

對于常指針,我們可以直接對其賦值,如a = b;;對于非常量指針,我們不能使用常量指針對其進(jìn)行賦值,如b = a;。

const修飾引用對象

引用也可以用const關(guān)鍵字修飾,這樣就不能通過引用名來修改變量值了。

如下代碼所示:

#include<iostream>
using namespace std;
int main() {
    int a = 10;
    const int& r = a;
    a = 10;//正常
    r = 10;//報錯
}

在執(zhí)行到r=10;這條語句時編譯器會報錯,提示表達(dá)式必須是可修改的左值,因為我們再初始化引用時將其加上了了const關(guān)鍵字,我們就不能通過引用名來修改變量的值了。

對于a = 10;這條語句則執(zhí)行正常,因為a沒有const關(guān)鍵字修飾。

再考量下面的代碼:

#include<iostream>
using namespace std;
int main() {
    const int a = 10;
    const int& b = a;//正確
    int& r = a;//錯誤
    r = 100;//錯誤
    a = 100;//錯誤
    return 0;
}

對于用const關(guān)鍵字修飾的變量,我們在為其創(chuàng)建引用對象時,任然需要創(chuàng)建const類型的引用對象,且無法通過變量名或引用名來修改變量的值。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容