91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

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

    瀏覽量

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

    關(guān)注

    0

    文章

    12

    瀏覽量

    12920
  • CONST
    +關(guān)注

    關(guān)注

    0

    文章

    45

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    C語(yǔ)言嵌入式系統(tǒng)編程注意事項(xiàng)-內(nèi)存操作

    的輸出參數(shù)。 (2)合理地使用關(guān)鍵字const可以使編譯器很自然地保護(hù)那些不**被改變的參數(shù),防止其被無(wú)意的代碼修改,這樣可以減少bug的出現(xiàn)。 constC++語(yǔ)言中則包含了更豐富
    發(fā)表于 01-04 07:31

    C語(yǔ)言與C++的區(qū)別及聯(lián)系

    缺點(diǎn):性能比面向過(guò)程低。 二、具體語(yǔ)言上的區(qū)別 1、關(guān)鍵字的不同 C語(yǔ)言32個(gè)關(guān)鍵字C++
    發(fā)表于 12-24 07:23

    關(guān)鍵字volatile的含意

    關(guān)鍵字volatile什么含意? 一個(gè)定義為volatile的變量是說(shuō)這變量可能會(huì)被意想不到地改變,這樣,編譯器就不會(huì)去假設(shè)這個(gè)變量的值了。精確地說(shuō)就是,優(yōu)化器在用到這個(gè)變量時(shí)必須每次都小心
    發(fā)表于 12-23 06:33

    interrupt關(guān)鍵字使用

    中斷是嵌入式系統(tǒng)中重要的組成部分,這導(dǎo)致了很多編譯開(kāi)發(fā)商提供一種擴(kuò)展—讓標(biāo)準(zhǔn)C支持中斷。具代表事實(shí)是,產(chǎn)生了一個(gè)新的關(guān)鍵字__interrupt。下面的代碼就使用了__interrupt關(guān)鍵字去定義
    發(fā)表于 12-22 09:36

    CC++之間的聯(lián)系

    ,后來(lái)才逐漸演變?yōu)橐环N成熟的面向?qū)ο缶幊陶Z(yǔ)言。 總之,C語(yǔ)言和C++雖然很多共同之處,但在編程范式、安全性、抽象層次等方面存在顯著差異。開(kāi)發(fā)者可以根據(jù)項(xiàng)目需求選擇合適的語(yǔ)言,C語(yǔ)言更
    發(fā)表于 12-11 06:51

    C++程序異常的處理機(jī)制

    語(yǔ)法 C++異常處理涉及到3個(gè)關(guān)鍵字: throw---拋出一個(gè)異常,帶參數(shù) try---用于標(biāo)識(shí)可能會(huì)出現(xiàn)異常的代碼段 catch--是用于標(biāo)識(shí)異常處理的代碼段 下面以一個(gè)例子來(lái)說(shuō)明它們
    發(fā)表于 12-02 07:12

    Temu跨境電商按關(guān)鍵字搜索Temu商品API的應(yīng)用及接口請(qǐng)求示例

    Temu跨境電商按關(guān)鍵字搜索Temu商品API的應(yīng)用及接口請(qǐng)求示例 Temu跨境電商按關(guān)鍵字搜索Temu商品API的應(yīng)用場(chǎng)景 Temu跨境電商平臺(tái)按關(guān)鍵字搜索Temu商品API的主要應(yīng)用場(chǎng)景包括但不
    的頭像 發(fā)表于 11-29 15:08 ?452次閱讀

    C語(yǔ)言的編程技巧

    、_Alignas關(guān)鍵字?:C11標(biāo)準(zhǔn)引入了_Alignas關(guān)鍵字,用于顯式指定類(lèi)型的對(duì)齊方式,優(yōu)化內(nèi)存訪問(wèn)效率。 ?5、_Generic關(guān)鍵字?:
    發(fā)表于 11-27 06:46

    哪些場(chǎng)合會(huì)用到volatile關(guān)鍵字?

    當(dāng)你理解 volatile關(guān)鍵字的含義之后,你就能明白,其實(shí)很多場(chǎng)合都能用到 volatile關(guān)鍵字。 1.全局變量單片機(jī)開(kāi)發(fā),難免會(huì)用到全局變量。一些初級(jí)工程師,更是全局變量滿(mǎn)天飛。這種情況下
    發(fā)表于 11-25 08:19

    天眼查平臺(tái)關(guān)鍵字搜索企業(yè)數(shù)據(jù)API接口技術(shù)指南

    ? 一、接口概述 天眼查提供的企業(yè)搜索API接口,支持通過(guò)關(guān)鍵字查詢(xún)企業(yè)工商信息、經(jīng)營(yíng)狀態(tài)等核心數(shù)據(jù)。該接口采用RESTful架構(gòu),返回JSON格式數(shù)據(jù)。 二、接口認(rèn)證 調(diào)用需使用API密鑰認(rèn)證
    的頭像 發(fā)表于 11-21 11:48 ?710次閱讀
    天眼查平臺(tái)<b class='flag-5'>關(guān)鍵字</b>搜索企業(yè)數(shù)據(jù)API接口技術(shù)指南

    亞馬遜平臺(tái)根據(jù)關(guān)鍵字搜索商品API接口

    ? ?在電商開(kāi)發(fā)中,集成亞馬遜平臺(tái)的商品搜索功能是常見(jiàn)需求。通過(guò)亞馬遜的Product Advertising API(PAAPI),開(kāi)發(fā)者可以根據(jù)關(guān)鍵字高效檢索商品信息。本技術(shù)帖將逐步介紹如何調(diào)用
    的頭像 發(fā)表于 11-05 15:00 ?371次閱讀
    亞馬遜平臺(tái)根據(jù)<b class='flag-5'>關(guān)鍵字</b>搜索商品API接口

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

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

    主流的 MCU 開(kāi)發(fā)語(yǔ)言為什么是 C 而不是 C++

    在單片機(jī)的地界兒里,C語(yǔ)言穩(wěn)坐中軍帳,C++想分杯羹?難嘍。咱電子工程師天天跟那針尖大的內(nèi)存空間較勁,C++那些花里胡哨的玩意兒,在這兒真玩不轉(zhuǎn)。先說(shuō)內(nèi)存這道坎兒。您當(dāng)stm32f4的256kRAM
    的頭像 發(fā)表于 05-21 10:33 ?1040次閱讀
    主流的 MCU 開(kāi)發(fā)語(yǔ)言為什么是 <b class='flag-5'>C</b> 而不是 <b class='flag-5'>C++</b>?

    單片機(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 ?3次下載