物聯(lián)網(wǎng)/嵌入式工程師
重磅升級:新增硬件電路設(shè)計(jì)與實(shí)戰(zhàn),讓你軟硬通吃,同級PK無敵!行業(yè)風(fēng)口、政策傾斜,新晉熱門高薪不內(nèi)卷!0基礎(chǔ)一站式就業(yè)完整路徑,搶占先發(fā)優(yōu)勢!
C++ 中的 const 千變?nèi)f化,之前我們已經(jīng)學(xué)過使用 const 來做一個常量。const 在 C++ 中整體表示的語意是“不變的”,但是 const 申明在不同位置,卻會有不一樣的效果。這一小節(jié),我們來集中學(xué)習(xí)一下 const。
例如:
const int a = 20;
則表示 a 是一個常量,你不可以在后續(xù)對其進(jìn)行修改。因?yàn)?a 不可修改,所以在創(chuàng)建的時候就要對 a 進(jìn)行賦值,不對其進(jìn)行賦值則會報(bào)錯。例如,下面的代碼就會報(bào)錯
const int a;
const 修飾指針可以分為多種情況:
int aaa = 20; int bbb = 30; const int * constPoint = &aaa; constPoint = &bbb; *constPoint = 80; // 這行代碼會報(bào)錯
int aaa = 20; int bbb = 30; int * const constPoint = &aaa; constPoint = &bbb; // 這行代碼會報(bào)錯 *constPoint = 80;
int aaa = 20; int bbb = 30; const int * const constPoint = &aaa; constPoint = &bbb; // 這行代碼會報(bào)錯 *constPoint = 80; // 這行代碼會報(bào)錯
const 修飾函數(shù)參數(shù)和修飾普通函數(shù)是一樣的。但是要注意的時候 const 修飾函數(shù)參數(shù)的時候,其作用域僅僅限制在函數(shù)內(nèi)部。也就是說,你可以把一個不用 const 修飾的參數(shù)傳入到 const 修飾的參數(shù)中去。而只要在函數(shù)中保持其不變性就可以了。
class A { public: int aaa; int funcA() const { aaa = 20; // 這行代碼會報(bào)錯 return 0; } }
class A { public: int aaa; int funcA() const { funcB(); // 這行代碼會報(bào)錯 return 0; } int funcB() { return 0; } }
修飾返回值要分成兩種情況
在 C++ 中有時我們會寫這樣的代碼:
A aaa; A & getA(){ return aaa; } int main(int argc,char **argv) { A bbb; getA() = bbb; return 0; }
上面的代碼運(yùn)行之后,aaa 變量就會被 bbb 所賦值,但是有些時候這樣做會造成一些混亂
例如:
getA() == a
有時候會有筆誤:
getA() = a
這種情況下,就會有問題,而且不容易被找到這個錯誤。
所以在大多數(shù)情況下,我們可以給返回值加一個 const ,這樣可以防止返回值被調(diào)用。
A aaa; const A & getA(){ return aaa; } int main(int argc,char **argv) { A bbb; getA() = bbb; // 這行代碼會報(bào)錯 return 0; }
值傳遞就簡單多了,因?yàn)橹祩鬟f的時候,返回值會被復(fù)制一份,所以加不加 const 都可以。
請驗(yàn)證,完成請求
由于請求次數(shù)過多,請先驗(yàn)證,完成再次請求
打開微信掃碼自動綁定
綁定后可得到
使用 Ctrl+D 可將課程添加到書簽
舉報(bào)