成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

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

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

大家好啊!我是小康。

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

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

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

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

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

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

二、const的兩種基本用法

1. 鎖住普通變量 - 最簡(jiǎn)單的const

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

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

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

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

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

所以 const 可以鎖兩種東西:

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

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

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

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

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

int num = 10;
const int* p = #  // 或者寫(xiě)成 int const* p = #

*p = 20;  // 錯(cuò)誤!不能通過(guò)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;  // 正確!可以通過(guò)p修改它指向的內(nèi)容
p = &other_num;  // 錯(cuò)誤!p本身被鎖住了,不能指向別處

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

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

情況三:const int* const p

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

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

*p = 20;  // 錯(cuò)誤!
p = &other_num;  // 錯(cuò)誤!

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

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

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

  • const int* p → p是一個(gè)指針,指向 const int
  • int* const p → p是一個(gè) const 指針,指向 int
  • const int* const p → p是一個(gè) 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ù),保證不會(huì)修改你的數(shù)據(jù)
void safeProcess(const int* data) {
    *data = 0;  // 編譯錯(cuò)誤!這樣就防止了意外修改
}

傳引用時(shí)提高效率又保證安全:

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

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

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

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

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

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

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

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

看到?jīng)]?就這么簡(jiǎn)單!

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

好了,const這個(gè)"攔路虎"就這樣被我們輕松拿下了!是不是感覺(jué)豁然開(kāi)朗?快去試試吧!

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

2013-09-12 15:39:30

編程語(yǔ)言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-16 09:06:03

2024-08-06 16:28:57

2023-11-19 22:52:42

2011-05-17 13:04:20

Cconst

2016-01-04 17:53:27

創(chuàng)始人2015失利

2010-02-25 11:02:29

JavaScript

2011-07-14 23:14:42

C++static

2015-11-10 16:10:22

C語(yǔ)言StaticConst

2020-05-25 14:17:49

碼農(nóng)編程語(yǔ)言GitHub

2010-02-01 14:46:53

C++關(guān)鍵字

2010-02-02 14:27:54

C++ static關(guān)

2011-04-11 15:06:22

C++關(guān)鍵字

2024-03-15 11:52:03

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

2010-02-05 15:51:06

C++ explici

2011-04-21 16:57:56

staticextern

2024-01-15 10:41:31

C++關(guān)鍵字開(kāi)發(fā)
點(diǎn)贊
收藏

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

主站蜘蛛池模板: 亚洲高清在线 | 国产激情免费视频 | 一区二区三区高清 | 国产91在线播放精品91 | 国产精品18久久久久久白浆动漫 | 玖玖视频免费 | 在线观看免费观看在线91 | 欧美黄色一区 | 久久久www成人免费无遮挡大片 | 91大神新作在线观看 | 日本免费网 | 手机日韩| 91精品国产乱码麻豆白嫩 | 亚洲一区二区网站 | 黑人精品欧美一区二区蜜桃 | 国产午夜精品久久久久免费视高清 | 户外露出一区二区三区 | 国产aaaaav久久久一区二区 | 精品www | 午夜在线小视频 | 国产精品视频久久 | 污片在线观看 | 亚洲一区二区成人 | 久久亚洲一区二区三区四区 | 国产精品区二区三区日本 | 一本一道久久a久久精品蜜桃 | 国产黄色在线观看 | 午夜免费网站 | 国产精品1区2区3区 男女啪啪高潮无遮挡免费动态 | 一区二区中文 | 日韩成人在线视频 | 国产福利在线看 | 91精品国产一区二区三区 | 日韩免费视频一区二区 | 日本激情视频中文字幕 | 黄色国产在线播放 | 国产中文视频 | 在线视频一区二区三区 | 国产高清精品一区二区三区 | 亚洲成人网在线播放 | 美国黄色毛片 |