- const 修飾全局變量時(shí)會(huì)修改其鏈接屬性為內(nèi)部鏈接颅拦。如果想要覆蓋這種鏈接可以使用extern關(guān)鍵字覆蓋這種鏈接屬性迂求。例如
const int a = 1;//內(nèi)部鏈接
extern const int a = 2; //外部鏈接
但不要輕易的這么做,因?yàn)镃++設(shè)計(jì)全局常量為內(nèi)部鏈接的是有原因的。假如你在一個(gè)頭文件(假設(shè)為constant.h)中申明了一系列的常量密似,工程的其他文件下引用constant.h。若全局常量的鏈接性為外部的葫盼,那么將有一個(gè)只能有一個(gè)文件包含constant.h残腌,如果有多個(gè)文件包含,則會(huì)產(chǎn)生重定義的錯(cuò)誤贫导。因此其他文件必須使用extern來(lái)引用這個(gè)頭文件中的常量抛猫,造成不便。因此假如你要使得一個(gè)常量為外部鏈接的脱盲,需要注意到這一點(diǎn)
- const關(guān)鍵字修飾指針時(shí)
int* const p = &a;//指針不可修改
const int* p = &b;//指針指向的內(nèi)存區(qū)域不可修改
- const 修飾成員變量時(shí)邑滨,必須在頭文件中聲明時(shí)直接進(jìn)行初始化
class A {
public:
const int a = 2;
};
- const修飾成員函數(shù)時(shí),該函數(shù)內(nèi)部不可以修改數(shù)據(jù)成員的值(mutable修飾的關(guān)鍵字除外)
class A {
public:
void f() const {
// a = 2;//error
int b = 2;//ok
c = 4;//ok
}
int a;
mutable int c = 3;
};