国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > C++ > 正文

c++==與c關(guān)鍵字的對(duì)比(2)

2019-11-09 20:32:47
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

從c到c++的升級(jí)包括關(guān)鍵字、內(nèi)存空間的分配、引用、函數(shù)、命名空間等等

關(guān)鍵字

包括register關(guān)鍵字及const關(guān)鍵字

- register 在c語(yǔ)言中,register關(guān)鍵字的意思是: 1、將局部變量存放在寄存器中。 2、所以想要對(duì)這個(gè)局部變量取地址時(shí),不能夠得到這個(gè)變量在內(nèi)存中的地址。 在c++中,register關(guān)鍵字的意思是: 1、在c++編譯器中,即使不用register關(guān)鍵字也可以實(shí)行優(yōu)化 2、當(dāng)對(duì)這個(gè)變量取地址時(shí),可以得到這個(gè)變量在內(nèi)存的地址

- const 在c語(yǔ)言中,const關(guān)鍵字的意思是: 1、被修飾的變量成為只讀變量 2、在定義的時(shí)候必須初始化 3、不可以通過(guò)變量名來(lái)改變變量的值,但可以通過(guò)別的方法來(lái)改變變量的值,如下

const int num = 5;int *p = #(*p)++;在c++中 1、遇見常量聲明時(shí),在符號(hào)表中放入常量。

//問:什么是符號(hào)表 符號(hào)表有哪些重要作用?//答:符號(hào)表在編譯程序工作的過(guò)程中需要不斷收集、記錄和使用源程序中一些語(yǔ)法符號(hào)的類型和特征等相關(guān)信息。這些信息一般以表格形式存儲(chǔ)于系統(tǒng)中。如常數(shù)表、變量名表、數(shù)組名表、過(guò)程名表、標(biāo)號(hào)表等等,統(tǒng)稱為符號(hào)表。對(duì)于符號(hào)表組織、構(gòu)造和管理方法的好壞會(huì)直接影響編譯系統(tǒng)的運(yùn)行效率。

2、編譯過(guò)程中,若是遇到使用這個(gè)常量,則直接用符號(hào)表中的值替換 3、編譯過(guò)程中,若是發(fā)現(xiàn)對(duì)這個(gè)常量進(jìn)行了extern或者是&操作符,則給這個(gè)常量分配對(duì)應(yīng)的存儲(chǔ)空間

//ps://雖然會(huì)給這個(gè)常量分配空間,但是不會(huì)使用這個(gè)空間里面的值const只能對(duì)const非const只能對(duì)應(yīng)非const決不能const對(duì)應(yīng)非const//如:const int num = 5;//想要用一個(gè)指針指向num的地址const int *p = #

const和define的不同 (1) 編譯器處理方式不同   define宏是在預(yù)處理階段展開。   const常量是編譯運(yùn)行階段使用。 (2) 類型和安全檢查不同   define宏沒有類型,不做任何類型檢查,僅僅是展開。   const常量有具體的類型,在編譯階段會(huì)執(zhí)行類型檢查。 (3) 存儲(chǔ)方式不同   define宏僅僅是展開,有多少地方使用,就展開多少次,不會(huì)分配內(nèi)存。(宏定義不分配內(nèi)存,變量定義分配內(nèi)存。)   const常量會(huì)在內(nèi)存中分配(可以是堆中也可以是棧中)。 (4)const 可以節(jié)省空間,避免不必要的內(nèi)存分配。 例如:

#define PI 3.14159 //常量宏 const doulbe Pi=3.14159; //此時(shí)并未將Pi放入ROM中 ...... double i=Pi; //此時(shí)為Pi分配內(nèi)存,以后不再分配! double I=PI; //編譯期間進(jìn)行宏替換,分配內(nèi)存 double j=Pi; //沒有內(nèi)存分配 double J=PI; //再進(jìn)行宏替換,又一次分配內(nèi)存!

const定義常量從匯編的角度來(lái)看,只是給出了對(duì)應(yīng)的內(nèi)存地址,而不是象#define一樣給出的是立即數(shù),所以,const定義的常量在程序運(yùn)行過(guò)程中只有一份拷貝(因?yàn)槭侨值闹蛔x變量,存在靜態(tài)區(qū)),而 #define定義的常量在內(nèi)存中有若干個(gè)拷貝。 (5) 提高了效率。 編譯器通常不為普通const常量分配存儲(chǔ)空間,而是將它們保存在符號(hào)表中,這使得它成為一個(gè)編譯期間的常量,沒有了存儲(chǔ)與讀內(nèi)存的操作,使得它的效率也很高。 (6) 宏替換只作替換,不做計(jì)算,不做表達(dá)式求解; 宏預(yù)編譯時(shí)就替換了,程序運(yùn)行時(shí),并不分配內(nèi)存。

const 與 #define的比較 C++ 語(yǔ)言可以用const來(lái)定義常量,也可以用 #define來(lái)定義常量。但是前者比后者有更多的優(yōu)點(diǎn): (1) const常量有數(shù)據(jù)類型,而宏常量沒有數(shù)據(jù)類型。編譯器可以對(duì)前者進(jìn)行類型安全檢查。而對(duì)后者只進(jìn)行字符替換,沒有類型安全檢查,并且在字符替換可能會(huì)產(chǎn)生意料不到的錯(cuò)誤(邊際效應(yīng))。 (2) 有些集成化的調(diào)試工具可以對(duì)const常量進(jìn)行調(diào)試,但是不能對(duì)宏常量進(jìn)行調(diào)試。


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 土默特右旗| 新巴尔虎右旗| 临颍县| 南开区| 高雄市| 金川县| 万宁市| 夏河县| 乌兰浩特市| 邹城市| 军事| 漯河市| 兴义市| 交城县| 壶关县| 抚州市| 白银市| 日土县| 秭归县| 昌乐县| 郸城县| 东乡| 囊谦县| 五华县| 庄河市| 江源县| 手机| 海晏县| 和田县| 乐清市| 罗甸县| 内丘县| 文成县| 阿荣旗| 淮滨县| 西华县| 深水埗区| 特克斯县| 玛多县| 云南省| 邯郸县|