欧美性猛交xxxx免费看_牛牛在线视频国产免费_天堂草原电视剧在线观看免费_国产粉嫩高清在线观看_国产欧美日本亚洲精品一5区

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

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

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

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

黃工的嵌入式技術(shù)圈 ? 來源:黃工的嵌入式技術(shù)圈 ? 作者:黃工的嵌入式技術(shù) ? 2020-02-03 14:51 ? 次閱讀

前言

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

修飾普通變量--只讀

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

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

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

舉個例子:

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

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

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

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

修飾引用

例如,有一個常量

constinta=10; 你不能再這樣定義它的引用:int&ref=a; 而需要定義對常量的引用,即:constint&ref=a; 為什么呢?因為不能直接為a賦值,也不能間接賦值,所以自然不能定義普通引用去間接改變它。

總結(jié)

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

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

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

    關(guān)注

    0

    文章

    16

    瀏覽量

    9842
  • C語音
    +關(guān)注

    關(guān)注

    0

    文章

    12

    瀏覽量

    12685
  • CONST
    +關(guān)注

    關(guān)注

    0

    文章

    45

    瀏覽量

    8193
收藏 人收藏

    評論

    相關(guān)推薦

    const定義的是不是常量

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

    Spire.XLS for C++組件說明

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

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

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

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

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

    C++新手容易犯的十個編程錯誤

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

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

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

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

    電子發(fā)燒友網(wǎng)站提供《C7000優(yōu)化C/C++編譯器.pdf》資料免費下載
    發(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語言關(guān)鍵字--typedef

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

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

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

    C++中實現(xiàn)類似instanceof的方法

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

    快速掌握C語言關(guān)鍵字

    C語言中的32個關(guān)鍵字你知道多少個呢?根據(jù)關(guān)鍵字的作用分為四類:數(shù)據(jù)類型關(guān)鍵字、控制語句關(guān)鍵字、存儲類型
    的頭像 發(fā)表于 07-06 08:04 ?430次閱讀
    快速掌握<b class='flag-5'>C</b>語言<b class='flag-5'>關(guān)鍵字</b>

    鴻蒙OS開發(fā)實例:【Native C++

    使用DevEco Studio創(chuàng)建一個Native C++應(yīng)用。應(yīng)用采用Native C++模板,實現(xiàn)使用NAPI調(diào)用C標(biāo)準(zhǔn)庫的功能。使用C標(biāo)準(zhǔn)庫hypot接口計算兩個給定數(shù)平方和的平
    的頭像 發(fā)表于 04-14 11:43 ?2787次閱讀
    鴻蒙OS開發(fā)實例:【Native <b class='flag-5'>C++</b>】

    使用 MISRA C++:2023? 避免基于范圍的 for 循環(huán)中的錯誤

    在前兩篇博客中,我們?向您介紹了新的 MISRA C++ 標(biāo)準(zhǔn)?和?C++ 的歷史?。在這篇博客中,我們將仔細(xì)研究以 C++ 中?for?循環(huán)為中心的特定規(guī)則。
    的頭像 發(fā)表于 03-28 13:53 ?872次閱讀
    使用 MISRA <b class='flag-5'>C++</b>:2023? 避免基于范圍的 for 循環(huán)中的錯誤

    嵌入式C語言面試大挑戰(zhàn)

    C++中static關(guān)鍵字除了具有C中的作用還有在類中的使用在類中,static可以用來修飾靜態(tài)數(shù)據(jù)成員和靜態(tài)成員方法靜態(tài)數(shù)據(jù)成員
    發(fā)表于 03-05 14:18 ?387次閱讀
    嵌入式<b class='flag-5'>C</b>語言面試大挑戰(zhàn)

    簡單總結(jié)一下嵌入式C++中常見的錯誤形式

    對于 C++ 類,一些關(guān)鍵字只要寫在 .h 中就好,cpp 中就不用再加上了,比如 virtual、static 等關(guān)鍵字,如果在 cpp 中多寫,編譯器會報錯。
    的頭像 發(fā)表于 02-23 09:40 ?585次閱讀