自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Const 左邊還是右邊?破解C++中最讓人抓狂的關(guān)鍵字

開發(fā)
今天咱們用最通俗的語言,把const int* p和int* const p這兩個"魔鬼"般的關(guān)鍵字徹底搞清楚!

大家好?。∥沂切】?。

今天咱們來聊一個讓無數(shù)程序員頭疼的話題 —— C++中的 const 關(guān)鍵字。不知道你有沒有過這種經(jīng)歷:剛開始學(xué)C++的時候,看到const int* p和int* const p這兩個東西,腦袋瞬間就懵了?"這兩個到底有啥區(qū)別???const 放左邊放右邊,不都一樣嗎?"

如果你也有這困惑,那今天這篇文章就是專門為你準(zhǔn)備的!咱們用最通俗的語言,把這個"魔鬼"般的關(guān)鍵字徹底搞清楚!

一、先別急著背口訣,理解才是王道

網(wǎng)上有很多口訣,什么"靠誰近就修飾誰",但很多人背了半天還是摸不著頭腦。今天我不想讓你背口訣,我要你真正理解為什么會這樣。

讓我們把這個問題想象成現(xiàn)實(shí)生活中的一個情景:

const就像是一把鎖??,它鎖住的東西就不能改變了。

二、const的兩種基本用法

1. 鎖住普通變量 - 最簡單的const

const int age = 18;
age = 19;  // 錯誤!age被const鎖住了,不能改變

這種情況很好理解吧?就是告訴編譯器:"嘿,這個變量不能變,死鎖定在這個值了!"

2. 指針世界的const - 這才是重頭戲

在指針世界里,const就變得有趣了,因?yàn)橹羔槺旧碛袃蓪雍x:

  • 指針變量本身(它存的是一個地址)
  • 指針指向的內(nèi)容(通過這個地址能找到的值)

所以 const 可以鎖兩種東西:

  • 鎖住指針本身,使它不能指向其他地方
  • 鎖住指針指向的內(nèi)容,使內(nèi)容不能被修改

現(xiàn)在問題就變得清晰了!

三、const在左在右,差別大了去了!

情況一:const int* p 或 int const* p(兩種寫法等價(jià))

這種情況下,const鎖的是指針指向的內(nèi)容(即*p)。

int num = 10;
const int* p = #  // 或者寫成 int const* p = #

*p = 20;  // 錯誤!不能通過p修改它指向的內(nèi)容
p = &other_num;  // 正確!p本身可以改變,指向別的地方

我們可以這樣記:const和int(類型)挨著,鎖定的就是內(nèi)容。

想象成:"你可以換手機(jī)(p可以變),但不能修改里面的通訊錄(*p不能變)"。

情況二:int* const p

這種情況下,const鎖的是指針變量本身(p)。

int num = 10;
int other_num = 20;
int* const p = #

*p = 30;  // 正確!可以通過p修改它指向的內(nèi)容
p = &other_num;  // 錯誤!p本身被鎖住了,不能指向別處

這里可以記作:const和變量名挨著,鎖定的就是指針本身。

想象成:"你不能換手機(jī)(p不能變),但可以修改里面的通訊錄(*p可以變)。"

情況三:const int* const p

這是終極形態(tài),兩個 const 都有,指針和內(nèi)容都被鎖住了!

int num = 10;
const int* const p = #

*p = 20;  // 錯誤!
p = &other_num;  // 錯誤!

想象成:"你不能換手機(jī),也不能修改里面的通訊錄,只能看看而已。"

四、實(shí)用小技巧:從右往左讀

如果你還是覺得復(fù)雜,有一個小技巧:從右往左讀聲明。

  • const int* p → p是一個指針,指向 const int
  • int* const p → p是一個 const 指針,指向 int
  • const int* const p → p是一個 const 指針,指向 const int

五、真實(shí)案例:const在函數(shù)參數(shù)中的應(yīng)用

為什么要用const?不僅僅是為了折磨你,它確實(shí)有重要作用。

防止函數(shù)內(nèi)部修改外部數(shù)據(jù):

// 不安全的函數(shù),可能修改你的數(shù)據(jù)
void process(int* data) {
    *data = 0;  // 哎呀,你的數(shù)據(jù)被我改了
}

// 安全的函數(shù),保證不會修改你的數(shù)據(jù)
void safeProcess(const int* data) {
    *data = 0;  // 編譯錯誤!這樣就防止了意外修改
}

傳引用時提高效率又保證安全:

// 這是最常見的const用法
void printBigObject(const BigObject& obj) {
    // 通過引用避免了復(fù)制大對象(提高效率)
    // 通過const確保函數(shù)不會修改對象(保證安全)
    cout << obj.toString() << endl;
}

六、真相了:const其實(shí)很友好

學(xué)會了const,你會發(fā)現(xiàn)它其實(shí)是 C++ 設(shè)計(jì)中很貼心的一部分:

  • 幫你避免意外修改不該修改的數(shù)據(jù)
  • 讓代碼更清晰,表達(dá)"這個東西不應(yīng)該被修改"的意圖
  • 編譯器可以做更多優(yōu)化

七、小結(jié):const記憶口訣

如果你看了前面的解釋還是覺得繞,那就記住這一句話:

const和誰在一起(挨著誰),就鎖定誰

  • const int* p:const和int(類型)挨著,鎖定的是內(nèi)容
  • int* const p:const和p挨著,鎖定的是指針本身

看到?jīng)]?就這么簡單!

啥?你說還有int const* p這種寫法?這個其實(shí)等價(jià)于const int* p,因?yàn)?const 和 * 都挨著,不管 const 在前還是在后,都是修飾 * 的。

好了,const這個"攔路虎"就這樣被我們輕松拿下了!是不是感覺豁然開朗?快去試試吧!

責(zé)任編輯:趙寧寧 來源: 跟著小康學(xué)編程
相關(guān)推薦

2013-09-12 15:39:30

編程語言BANCStar

2024-02-23 18:04:37

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

2021-07-28 06:53:02

C++Const指針傳遞

2010-01-26 14:35:11

C++關(guān)鍵字

2024-08-06 16:28:57

2024-08-16 09:06:03

2023-11-19 22:52:42

2011-05-17 13:04:20

Cconst

2015-11-10 16:10:22

C語言StaticConst

2011-07-14 23:14:42

C++static

2016-01-04 17:53:27

創(chuàng)始人2015失利

2010-02-25 11:02:29

JavaScript

2010-02-05 15:51:06

C++ explici

2011-04-11 15:06:22

C++關(guān)鍵字

2010-02-01 14:46:53

C++關(guān)鍵字

2010-02-02 14:27:54

C++ static關(guān)

2024-03-15 11:52:03

C++關(guān)鍵字編程

2011-04-21 16:57:56

staticextern

2022-02-08 08:31:52

const關(guān)鍵字C語言

2024-04-08 11:35:34

C++static關(guān)鍵字
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號