C語(yǔ)言中const和C++中的const 區(qū)別詳解
C語(yǔ)言中const和C++中的const 區(qū)別詳解
C++的const和C語(yǔ)言的#define都可以用來(lái)定義常量,二者是有區(qū)別的,const是有數(shù)據(jù)類型的常量,而宏常量沒(méi)有,編譯器可以對(duì)前者進(jìn)行靜態(tài)類型安全檢查,對(duì)后者僅是字符替換,沒(méi)有類型安全檢查。
而C語(yǔ)言中的const與C++也有很大的不同,在C語(yǔ)言中用const修飾的變量仍是一個(gè)變量,表示這個(gè)變量是只讀的,不可顯示地更改,而在C++中用const修飾過(guò)后,就變成常量了。例如下面的代碼:
const int n=10; int a[n];
這兩行代碼在C語(yǔ)言中會(huì)報(bào)錯(cuò),因?yàn)槁暶鲾?shù)組時(shí)的數(shù)組長(zhǎng)度必須是常量,而這里面的n在C語(yǔ)言中是變量。而在C++中用const修飾過(guò)后,n就已經(jīng)等同于一個(gè)常量了,因此可以通過(guò)。
再看下面的代碼:
const int a=3; int* p=&a; *p=4;
這種情況在C++中是不允許的,原因在于a用const修飾后,已經(jīng)成為常量了,因此是不允許被修改的,無(wú)論是顯式的更改a的值或是通過(guò)其它方法修改它的值都是不允許的。
感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!
相關(guān)文章
二叉樹(shù)中葉子節(jié)點(diǎn)的統(tǒng)計(jì)和樹(shù)高問(wèn)題
今天小編就為大家分享一篇關(guān)于二叉樹(shù)中葉子節(jié)點(diǎn)的統(tǒng)計(jì)和樹(shù)高問(wèn)題,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-03-03C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)系列隊(duì)列篇
本章我們將學(xué)習(xí) "隊(duì)列" ,首先介紹隊(duì)列的概念和結(jié)構(gòu),然后我們將著重講解棧的實(shí)現(xiàn)。我們從零開(kāi)始寫(xiě)隊(duì)列的接口,并從零開(kāi)始步步解讀。本章將繼續(xù)鞏固畫(huà)思路草圖的能力,只要思路草圖畫(huà)好了,就可以很輕松地將其轉(zhuǎn)換成代碼2022-02-02淺析C++模板類型中的原樣轉(zhuǎn)發(fā)和可變參數(shù)的實(shí)現(xiàn)
可變參數(shù)模板(variadic templates)是C++11新增的強(qiáng)大的特性之一,它對(duì)模板參數(shù)進(jìn)行了高度泛化,能表示0到任意個(gè)數(shù)、任意類型的參數(shù),這篇文章主要介紹了C++可變參數(shù)模板的展開(kāi)方式,需要的朋友可以參考下2022-08-08c++的virtual和override作用及說(shuō)明
這篇文章主要介紹了c++的virtual和override作用及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-11-11Linux下用Valgrind做檢查(防止內(nèi)存泄露)
Valgrind是一款基于模擬linux下的程序調(diào)試器和剖析器的軟件套件,可以運(yùn)行于x86, amd64和ppc32架構(gòu)上。valgrind包含一個(gè)核心,它提供一個(gè)虛擬的CPU運(yùn)行程序,還有一系列的工具,它們完成調(diào)試,剖析和一些類似的任務(wù)2014-01-01