const 常量_软件特攻队|const常量,不一样的新玩法
const用于申明變量,放于變量類(lèi)型之前,表示此變量不可被改變。然而C語(yǔ)言和C++中的const有著不一樣的意義。如下所示:
const int a = 10;int *p = &a;
上面這段代碼在C語(yǔ)言下不會(huì)報(bào)錯(cuò),但是在C++下會(huì)提示“無(wú)法從const int *轉(zhuǎn)換為int *”,那么如果將C++的&a強(qiáng)行轉(zhuǎn)化為int *看看。
int *p = (int*)&a;成功運(yùn)行,在后面修改一下*p的值,輸出。
*p = 2;在C語(yǔ)言中輸出值為:
在C++中輸出值為:
如上所示,為什么C語(yǔ)言里修改變量的值能通過(guò)指針,C++里面卻行不通?既然修改不了,那么2存在哪里,什么時(shí)候進(jìn)行分配的空間?
總結(jié)
1、在C語(yǔ)言中編譯器會(huì)給常量分配內(nèi)存,然而在使用常量時(shí),常量將會(huì)被立即數(shù)替換,以此保護(hù)常量,防止被破壞性修改。
2、在C++中對(duì)于基本類(lèi)型的常量,編譯器并不會(huì)為其分配存儲(chǔ)空間,編譯器會(huì)將它放到符號(hào)表。在獲取符號(hào)常量的地址等操作時(shí),會(huì)強(qiáng)迫編譯器為這些常量分配對(duì)應(yīng)的存儲(chǔ)空間,因此編譯器會(huì)重新在內(nèi)存中創(chuàng)建一個(gè)它的拷貝,我們通過(guò)地址訪問(wèn)的就是這個(gè)拷貝而非原始的符號(hào)常量。
3、C語(yǔ)言的常量往往不能用來(lái)確定數(shù)組的大小,但是C++的常量卻是可以用來(lái)確定數(shù)組的大小。
歡迎關(guān)注軟件特攻隊(duì)!
總結(jié)
以上是生活随笔為你收集整理的const 常量_软件特攻队|const常量,不一样的新玩法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: cad常用字体_2300多种CAD字体免
- 下一篇: C++字符串完全指引之一(Win32 字