99精品伊人亚洲|最近国产中文炮友|九草在线视频支援|AV网站大全最新|美女黄片免费观看|国产精品资源视频|精彩无码视频一区|91大神在线后入|伊人终合在线播放|久草综合久久中文

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

C++與C的const關(guān)鍵字有何差別?

黃工的嵌入式技術(shù)圈 ? 來(lái)源:黃工的嵌入式技術(shù)圈 ? 作者:黃工的嵌入式技術(shù) ? 2020-02-03 14:51 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

前言

在《const關(guān)鍵字到底該怎么用》一文中介紹了C語(yǔ)言中的const關(guān)鍵字,本文說(shuō)說(shuō)C++中的const關(guān)鍵字,它的大部分特點(diǎn)和C語(yǔ)言中的類(lèi)似,所以本文主要針對(duì)不同之處。

修飾普通變量--只讀

在C語(yǔ)言,雖然表面是不允許被修改,但是看下面的代碼:

#include intmain(void) { constinta=10; int*p=&a; *p=11; printf("a=%d\n",a); return0; } 它的輸出結(jié)果是a=11 所以C語(yǔ)言里,表面上它是只讀的,然而你違規(guī)操作仍然能改變。但是,千萬(wàn)不要寫(xiě)這樣的代碼?。?! 與C語(yǔ)言中const關(guān)鍵字不同的是,C++中使用const關(guān)鍵字定義的b變量的值在被改變時(shí)會(huì)被檢測(cè)。 看一個(gè)例子就明白了:#include intmain() { constinta=10; int*p=&a; *p=11; return0; } 編譯報(bào)錯(cuò)如下:main.cpp:Infunction‘intmain()’: main.cpp:5:14:error:invalidconversionfrom‘constint*’to‘int*’[-fpermissive] int*p=&a; 再次強(qiáng)調(diào):在實(shí)際中千萬(wàn)不要寫(xiě)這樣的代碼,這里只是為了說(shuō)明問(wèn)題。另外它們的作用也是一樣的,聲明一個(gè)只讀變量,不希望被修改,一旦被修改,編譯器將會(huì)報(bào)錯(cuò)。 但是你運(yùn)行下面的代碼,又會(huì)有驚喜:#include voidtest(constchar*str) { char*p=(char*)str; p[0]='2'; } intmain(void) { chara[]="12345"; test(a); return0; }畢竟未定義行為常常有驚喜。 我們常??吹絺鬟fconst char*參數(shù),像這樣:voidtest(constchar*str); 卻似乎從來(lái)沒(méi)有見(jiàn)到過(guò)const int作為參數(shù)的函數(shù):voidtest(constintval); 為何?因?yàn)榍罢邆鬟f指針的副本,指針指向不會(huì)被改變,但可以改變指向的內(nèi)容;但是int類(lèi)型參數(shù),它也是傳遞副本,但是永遠(yuǎn)不會(huì)被函數(shù)改變,自然也沒(méi)有必要加const關(guān)鍵字。更多解釋可以參考《傳值和傳指針》。 同樣的,修飾函數(shù)返回值時(shí),修飾內(nèi)置類(lèi)型與不加const修飾是一樣的,但對(duì)于自定義類(lèi)型,不能對(duì)返回值進(jìn)行修改,即返回的是常量。

作用在成員函數(shù)-不改變成員變量

舉個(gè)例子:

#include classTest { private: inta; public: voidprintA()const { a=10; } }; intmain() { Testtest; test.printA(); return0; } 類(lèi)test中有一個(gè)成員變量a,并且有一個(gè)成員函數(shù)printA,現(xiàn)在假設(shè)你的設(shè)計(jì)是printA函數(shù)不會(huì)改變?nèi)魏纬蓡T變量,那么你可以在printA函數(shù)后加上const關(guān)鍵字,這樣一旦函內(nèi)部嘗試修改成員變量,都會(huì)報(bào)錯(cuò):main.cpp:Inmemberfunction‘voidTest::printA()const’: main.cpp:9:13:error:assignmentofmember‘Test::a’inread-onlyobject a=10; 正因如此,const修飾成員函數(shù)不與static關(guān)鍵字同用,因?yàn)閟tatic修飾的靜態(tài)成員函數(shù)不能實(shí)例化,也就沒(méi)有實(shí)例的成員變量一說(shuō),自然不存在修改成員變量。 即下面的聲明是非法的:staticvoidprintA()const

修飾類(lèi)成員變量--構(gòu)造函數(shù)中初始化

與修飾普通變量不同的是,修飾類(lèi)成員變量還可以在構(gòu)造函數(shù)中初始化。如:

#include classTest { private: constinta; public: Test(intval):a(val){} }; intmain() { Testtest(1); return0; }

修飾引用

例如,有一個(gè)常量

constinta=10; 你不能再這樣定義它的引用:int&ref=a; 而需要定義對(duì)常量的引用,即:constint&ref=a; 為什么呢?因?yàn)椴荒苤苯訛閍賦值,也不能間接賦值,所以自然不能定義普通引用去間接改變它。

總結(jié)

關(guān)于const關(guān)鍵字在C和C++中的區(qū)別,想必到這里你已經(jīng)清楚了。const關(guān)鍵字通常能借助編譯器幫助我們提前發(fā)現(xiàn)一些不易察覺(jué)的問(wèn)題。 如果你對(duì)下面的問(wèn)題還不清楚,建議閱讀《const關(guān)鍵字到底該怎么用》 你能分清下面的聲明區(qū)別嗎?

constint*p; int*constp; intconst*constp;

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 關(guān)鍵詞
    +關(guān)注

    關(guān)注

    0

    文章

    16

    瀏覽量

    10293
  • C語(yǔ)音
    +關(guān)注

    關(guān)注

    0

    文章

    12

    瀏覽量

    12801
  • CONST
    +關(guān)注

    關(guān)注

    0

    文章

    45

    瀏覽量

    8463
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    micro 關(guān)鍵字搜索全覆蓋商品,并通過(guò) API 接口提供實(shí)時(shí)數(shù)據(jù)

    micro 關(guān)鍵字搜索全覆蓋商品”并通過(guò) API 接口提供實(shí)時(shí)數(shù)據(jù)
    的頭像 發(fā)表于 07-13 10:13 ?209次閱讀

    單片機(jī)編程關(guān)鍵字之volatile

    volatile 修飾的變量是說(shuō)這變量可能會(huì)被意想不到地改變。通常對(duì)于程序員而言,單片機(jī) 中用的就算常見(jiàn)了volatile 是易變的,不穩(wěn)定的意思。其實(shí)對(duì)于很多人來(lái)說(shuō),根本沒(méi)見(jiàn)過(guò)這個(gè)關(guān)鍵字,不 知道
    發(fā)表于 04-02 13:47 ?2次下載

    帶你在單片機(jī)編程中熟練使用const(可下載)

    C 語(yǔ)言關(guān)鍵字const 舉足輕重,我們今天就深度聊一聊 const 的定義和實(shí)際應(yīng)用,讓它 不再是迷C 語(yǔ)言中
    發(fā)表于 04-01 14:18 ?2次下載

    const定義的是不是常量

    變成數(shù)字 5。 第二種跟宏定義類(lèi)似,常量也可以在編譯的時(shí)候通過(guò)編譯器傳入。 以 gcc 為例,編譯的時(shí)候提供 -D 選項(xiàng),同樣會(huì)在預(yù)處理的時(shí)候替換成相應(yīng)的數(shù)字。 第三種枚舉,使用 enum 關(guān)鍵字。 枚舉的特點(diǎn)是默認(rèn)從 0 開(kāi)始,逐漸遞增。如果需要大量含義相同的常量
    的頭像 發(fā)表于 01-14 11:35 ?433次閱讀

    Spire.XLS for C++組件說(shuō)明

    Spire.XLS for C++ 是一款專(zhuān)業(yè)的 C++ Excel 組件,可以用在各種 C++ 框架和應(yīng)用程序中。Spire.XLS for C++ 提供了一個(gè)對(duì)象模型 Excel
    的頭像 發(fā)表于 01-14 09:40 ?619次閱讀
    Spire.XLS for <b class='flag-5'>C++</b>組件說(shuō)明

    同樣是函數(shù),在CC++中有什么區(qū)別

    ,即使沒(méi)有數(shù)據(jù)返回,也得寫(xiě) void。 第二個(gè)函數(shù)名。 C語(yǔ)言的函數(shù)名絕對(duì)不能重名,除了用上 weak 這樣的黑科技。同一個(gè)項(xiàng)目中,函數(shù)重名就會(huì)提示重復(fù)定義。 C++因?yàn)楹瘮?shù)重載的存在,函數(shù)名可以相同,只要參數(shù)區(qū)別就行。這兩個(gè)
    的頭像 發(fā)表于 11-29 10:25 ?909次閱讀

    C語(yǔ)言關(guān)鍵字分別發(fā)生在哪個(gè)階段

    在編譯的第一個(gè)階段:預(yù)處理,對(duì)一些宏定義做替換。 第二個(gè),const。 C語(yǔ)言中的 const 用于修飾只讀變量,表示變量本身不能修改。 這個(gè)關(guān)鍵字會(huì)在編譯的第二步起作用,也就是編譯。
    的頭像 發(fā)表于 11-24 10:31 ?598次閱讀

    C++新手容易犯的十個(gè)編程錯(cuò)誤

    簡(jiǎn)單的總結(jié)一下?C++ 新手容易犯的一些編程錯(cuò)誤,給新人們提供一個(gè)參考。 1 有些關(guān)鍵字在 cpp 文件中多寫(xiě)了 對(duì)于 C++ 類(lèi),一些關(guān)鍵字只要寫(xiě)在 .h 中就好,cpp 中就不用再
    的頭像 發(fā)表于 11-15 12:42 ?1026次閱讀

    C7000 C/C++優(yōu)化指南用戶手冊(cè)

    電子發(fā)燒友網(wǎng)站提供《C7000 C/C++優(yōu)化指南用戶手冊(cè).pdf》資料免費(fèi)下載
    發(fā)表于 11-09 15:00 ?0次下載
    <b class='flag-5'>C</b>7000 <b class='flag-5'>C</b>/<b class='flag-5'>C++</b>優(yōu)化指南用戶手冊(cè)

    C語(yǔ)言和C++中結(jié)構(gòu)體的區(qū)別

    同樣是結(jié)構(gòu)體,看看在C語(yǔ)言和C++中有什么區(qū)別?
    的頭像 發(fā)表于 10-30 15:11 ?767次閱讀

    C7000優(yōu)化C/C++編譯器

    電子發(fā)燒友網(wǎng)站提供《C7000優(yōu)化C/C++編譯器.pdf》資料免費(fèi)下載
    發(fā)表于 10-30 09:45 ?0次下載
    <b class='flag-5'>C</b>7000優(yōu)化<b class='flag-5'>C</b>/<b class='flag-5'>C++</b>編譯器

    C語(yǔ)言關(guān)鍵字--typedef

    C語(yǔ)言關(guān)鍵字使用方法學(xué)習(xí)指南!
    的頭像 發(fā)表于 10-07 12:44 ?614次閱讀

    使用邊緣AI和Sitara處理器進(jìn)行關(guān)鍵字檢測(cè)

    電子發(fā)燒友網(wǎng)站提供《使用邊緣AI和Sitara處理器進(jìn)行關(guān)鍵字檢測(cè).pdf》資料免費(fèi)下載
    發(fā)表于 09-02 11:30 ?0次下載
    使用邊緣AI和Sitara處理器進(jìn)行<b class='flag-5'>關(guān)鍵字</b>檢測(cè)

    C++語(yǔ)言基礎(chǔ)知識(shí)

    電子發(fā)燒友網(wǎng)站提供《C++語(yǔ)言基礎(chǔ)知識(shí).pdf》資料免費(fèi)下載
    發(fā)表于 07-19 10:58 ?10次下載

    C++中實(shí)現(xiàn)類(lèi)似instanceof的方法

    C++多態(tài)與繼承,但是很多人開(kāi)始學(xué)習(xí)C++,有時(shí)候會(huì)面臨一個(gè)常見(jiàn)問(wèn)題,就是如何向下轉(zhuǎn)型,特別是不知道具體類(lèi)型的時(shí)候,這個(gè)時(shí)候就希望C++ 可以向Java或者Python中有insta
    的頭像 發(fā)表于 07-18 10:16 ?945次閱讀
    <b class='flag-5'>C++</b>中實(shí)現(xiàn)類(lèi)似instanceof的方法