const
創(chuàng)新互聯(lián)長(zhǎng)期為近1000家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開(kāi)放共贏平臺(tái),與合作伙伴共同營(yíng)造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為萬(wàn)山企業(yè)提供專業(yè)的成都網(wǎng)站建設(shè)、成都做網(wǎng)站,萬(wàn)山網(wǎng)站改版等技術(shù)服務(wù)。擁有10多年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開(kāi)發(fā)。7.C++編譯器對(duì)const常量的處理
(1)當(dāng)碰見(jiàn)常量聲明時(shí)在符號(hào)表中放入常量
(2)編譯過(guò)程中若發(fā)現(xiàn)使用常量則直接以符號(hào)表中的值替換
(3)編譯過(guò)程中若發(fā)現(xiàn)對(duì)const使用了extern或者&操作符,則給對(duì)應(yīng)的常量分配存儲(chǔ)空間
8.C語(yǔ)言中的const變量:是只讀變量,有自己的存儲(chǔ)空間
9.C++中的const,在定義的時(shí)候放入符號(hào)表中,在使用的時(shí)候直接從符號(hào)表中取出,可以通過(guò)取地址改變內(nèi)存的值,但是在使用的時(shí)候不會(huì)用內(nèi)存中的值
10.當(dāng)const常量為全局,并且需要在其他文件中使用,當(dāng)使用&操作符取const常量的地址
11.C++所有的變量和函數(shù)都必須有類型
12.在C語(yǔ)言中int f()表示返回值為int ,接受任意參數(shù)的函數(shù)
int f(void);表示返回值為int 的無(wú)參函數(shù)
在C++中
int f();和int f(void)具有相同的意義,都表示返回值為int的無(wú)參函數(shù)
bool
13.C++中的布爾類型
(1)C++在C語(yǔ)言的基本類型系統(tǒng)之上增加了bool
(2)C++的bool可取的值只有true和false
(3)理論上bool只占用一個(gè)字節(jié)
如果多個(gè)bool變量定義在一起,可能會(huì)個(gè)占一個(gè)bit,這取決于編譯器的實(shí)現(xiàn)
Tip:
true代表真值,編譯器內(nèi)部用1來(lái)表示
false代表非真值,編譯器內(nèi)部用0來(lái)表示
14.bool類型只有true和false兩個(gè)值
C++編譯器會(huì)在賦值時(shí)將非0值轉(zhuǎn)換為true,0值轉(zhuǎn)換為false。
15.bool類型也參加數(shù)學(xué)運(yùn)算
16.三目運(yùn)算符的升級(jí):C語(yǔ)言中返回的是變量的值,C++中返回的是變量的本身。三目運(yùn)算符可能的返回值中如果有一個(gè)是常量值,則不能作為左值使用.
引用
17.C++中的引用:引用可以看作一個(gè)已定義變量的別名
引用的語(yǔ)法:Type& name=var;(普通引用在聲明時(shí)必須用其他的變量進(jìn)行初始化)
18.引用的意義:
引用作為其他變量的別名而存在,因此在一些場(chǎng)合可以代替指針
引用相對(duì)于指針來(lái)說(shuō)具有更好的可讀性和實(shí)用性
19.引用作為函數(shù)參數(shù)聲明時(shí)不進(jìn)行初始化
20.引用是正宗的傳址,指針實(shí)質(zhì)上是傳值
21.const引用
(1)在C++中可以聲明const引用
(2)const Type& name=var
(3)const引用讓變量擁有只讀屬相
22.當(dāng)使用常量對(duì)const引用進(jìn)行初始化時(shí),C++編譯器會(huì)為常量值分配空間,并將引用名作為這段空間的別名(使用常量對(duì)const引用初始化后將生成一個(gè)只讀變量)
23.引用在C++中的內(nèi)部實(shí)現(xiàn)是一個(gè)常指針
Type&name=Type* const name
C++編譯器在編譯過(guò)程中使用常指針作為引用的內(nèi)部實(shí)現(xiàn),因此引用所占用的空間大小與指針相同
從使用的角度,引用會(huì)讓人誤會(huì)其只是一個(gè)別名,沒(méi)有自己的存儲(chǔ)空間,只是C++為了實(shí)用性而做出的細(xì)節(jié)隱藏。
24. 當(dāng)函數(shù)返回值是引用時(shí):
若返回棧變量:不能成為其他引用的初始值,不能作為左值使用
若返回靜態(tài)變量或全局變量:可以成為其他引用的初始值,即可作為右值使用,也可作為左值使用
內(nèi)聯(lián)函數(shù)
25.C++中推薦使用內(nèi)聯(lián)函數(shù)替代宏代碼片段
C++中使用inline關(guān)鍵字聲明內(nèi)聯(lián)函數(shù)
inline int func(int a,int b) { return a內(nèi)聯(lián)函數(shù)聲明時(shí)inline關(guān)鍵字必須和函數(shù)定義結(jié)合在一起,否則編譯器會(huì)直接忽略內(nèi)聯(lián)請(qǐng)求
26.
(1)C++編譯器可以將一個(gè)函數(shù)進(jìn)行內(nèi)聯(lián)編譯
(2)被C++編譯器內(nèi)聯(lián)編譯的函數(shù)叫做內(nèi)聯(lián)函數(shù)
(3)內(nèi)聯(lián)函數(shù)在最終生成的代碼中是沒(méi)有定義的
(4)C++編譯器直接將函數(shù)體插入函數(shù)調(diào)用的地方
(5)內(nèi)聯(lián)函數(shù)沒(méi)有普通函數(shù)調(diào)用時(shí)的額外開(kāi)銷(壓棧,跳轉(zhuǎn),返回)
C++編譯器不一定準(zhǔn)許函數(shù)的內(nèi)聯(lián)請(qǐng)求
(6)內(nèi)聯(lián)函數(shù)是一種特殊的函數(shù),具有普通函數(shù)的特征(參數(shù)檢查,返回類型等)
(7)內(nèi)聯(lián)函數(shù)是對(duì)編譯器的一種請(qǐng)求,因此編譯器可能拒絕這種請(qǐng)求
(8)內(nèi)聯(lián)函數(shù)由編譯器處理,直接將編譯后的函數(shù)體插入調(diào)用的地方,宏代碼片段由預(yù)處理器處理,進(jìn)行簡(jiǎn)單的文本替換,沒(méi)有任何編譯過(guò)程。
27.現(xiàn)代C++編譯器能夠進(jìn)行編譯優(yōu)化,因此一些函數(shù)即使沒(méi)有inline聲明,也可能被編譯器內(nèi)聯(lián)編譯
28.另外,一些現(xiàn)代C++編譯器提供了拓展語(yǔ)法,能夠?qū)瘮?shù)進(jìn)行強(qiáng)制內(nèi)聯(lián)
如:
_attribute_((always_inline))//屬性29.C++內(nèi)聯(lián)編譯的限制:
(1)不能存在任何形式的循環(huán)語(yǔ)句
(2)不能存在過(guò)多的條件判斷語(yǔ)句
(3)函數(shù)體不能過(guò)于龐大
(4)不能對(duì)函數(shù)進(jìn)行取地址操作
(5)函數(shù)內(nèi)聯(lián)聲明必須在調(diào)用語(yǔ)句之前
編譯器對(duì)于內(nèi)聯(lián)函數(shù)的限制并不是絕對(duì)的,內(nèi)聯(lián)函數(shù)相對(duì)于普通函數(shù)的優(yōu)勢(shì)只是省去了函數(shù)調(diào)用時(shí)壓棧,跳轉(zhuǎn)和返回的開(kāi)銷,因此,當(dāng)函數(shù)體的執(zhí)行開(kāi)銷遠(yuǎn)大于壓棧,跳轉(zhuǎn)和返回所用的開(kāi)銷時(shí),那么內(nèi)聯(lián)將無(wú)意義。
30.C++中的符號(hào)表編譯器自己所用的東西,不會(huì)進(jìn)入最終的程序的。
31.C++中可以在函數(shù)聲明時(shí)為參數(shù)提供一個(gè)默認(rèn)值,當(dāng)函數(shù)調(diào)用時(shí)沒(méi)有指定這個(gè)參數(shù)的值,編譯器會(huì)自動(dòng)用默認(rèn)值代替
32.函數(shù)默認(rèn)參數(shù)的規(guī)則:
(1)只有參數(shù)列表后面部分的參數(shù)才可以提供默認(rèn)參數(shù)值
一旦在一個(gè)函數(shù)調(diào)用中開(kāi)始使用默認(rèn)參數(shù)值,那么這個(gè)參數(shù)后的所有參數(shù)都必須使用默認(rèn)參數(shù)值
33.在C++中可以為函數(shù)提供占位參數(shù)
(1)占位參數(shù)只有參數(shù)類型聲明,而沒(méi)有參數(shù)名聲明
(2)一般情況下,在函數(shù)體內(nèi)部無(wú)法使用占位參數(shù)
34.可以將占位參數(shù)與默認(rèn)參數(shù)結(jié)合起來(lái)使用
(1)為以后程序的拓展留下線索
(2)兼容C語(yǔ)言中可能出現(xiàn)的不規(guī)范寫(xiě)法
35.
重載
定義:同一個(gè)標(biāo)識(shí)符在不同的上下文有不同的意義
36.函數(shù)重載:
(1)用同一個(gè)函數(shù)名定義不同(參數(shù)不同)的函數(shù)
(2)當(dāng)函數(shù)名和不同的參數(shù)搭配時(shí)函數(shù)的含義不同
37.函數(shù)重載至少滿足下面的一個(gè)條件:
(1)參數(shù)個(gè)數(shù)不同
(2)參數(shù)類型不同
(3)參數(shù)順序不同
38.當(dāng)函數(shù)的默認(rèn)參數(shù)和函數(shù)重載在一起時(shí):引用會(huì)報(bào)錯(cuò)(存在二議性,調(diào)用失?。?/p>
39.編譯器調(diào)用重載函數(shù)的準(zhǔn)則:
(1)將所有同名函數(shù)作為候選者
(2)嘗試尋找可行的候選函數(shù)
.精確匹配實(shí)參
.通過(guò)默認(rèn)參數(shù)能夠匹配實(shí)參
.通過(guò)默認(rèn)類型轉(zhuǎn)換匹配實(shí)參
(3)匹配失敗
.最終尋找到的可行候選函數(shù)不唯一,則出現(xiàn)二義性,編譯失敗
.無(wú)法匹配所有候選者,函數(shù)未定義,編譯失敗
40.函數(shù)重載的注意事項(xiàng):
(1)重載函數(shù)在本質(zhì)上是相互獨(dú)立的不同函數(shù)(2)重載函數(shù)的函數(shù)類型是不同的
(3)函數(shù)返回值不能作為函數(shù)重載的依據(jù)
函數(shù)重載是由函數(shù)名和參數(shù)列表決定的
41.
函數(shù)重載與函數(shù)指針
(1)當(dāng)使用重載函數(shù)名對(duì)函數(shù)指針進(jìn)行賦值時(shí)
.根據(jù)重載規(guī)則挑選與函數(shù)指針參數(shù)列表一致的候選者
.嚴(yán)格匹配候選者的函數(shù)類型與函數(shù)指針的函數(shù)類型
42.利用extern關(guān)鍵字強(qiáng)制讓C++編譯器對(duì)代碼進(jìn)行C方式編譯
43.C++中的動(dòng)態(tài)內(nèi)存分配:
.C++中通過(guò)new關(guān)鍵字進(jìn)行動(dòng)態(tài)內(nèi)存申請(qǐng)
.C++中的動(dòng)態(tài)內(nèi)存申請(qǐng)是基于類型進(jìn)行的
.delete關(guān)鍵字用于內(nèi)存釋放
44.new關(guān)鍵字與malloc函數(shù)的區(qū)別:
(1)new關(guān)鍵字是C++的一部分,malloc是由C庫(kù)提供的函數(shù)
(2)new以具體類型為單位進(jìn)行內(nèi)存分配,malloc只能以字節(jié)為單位進(jìn)行內(nèi)存分配
(3)new在申請(qǐng)單個(gè)類型變量時(shí)可進(jìn)行初始化,malloc不具備內(nèi)存初始化的特性
int* pi=new int(1);//將指針指向的變量初始化 float* pf=new float(2.0);45.在C語(yǔ)言中只有一個(gè)全局作用域:
C語(yǔ)言中所有的全局標(biāo)識(shí)符共享一個(gè)作用域,標(biāo)識(shí)符之間可能發(fā)生沖突
46.C++提出了命名空間的概念
(1)命名空間將全局作用域分成不同的部分
(2)不同命名空間中的標(biāo)識(shí)符可以同名而不會(huì)發(fā)生沖突
(3)命名空間可以相互嵌套
(4)全局作用域也叫默認(rèn)命名空間
47.C++命名空間關(guān)鍵字為(namespace)
48.C++命名空間的使用:
(1)使用整個(gè)命名空間:using namespace name;
(2)使用命名空間中的變量:using nam::variable
(3)使用默認(rèn)命名空間中的變量:::variable
默認(rèn)情況下可以直接使用默認(rèn)命名空間中的所有標(biāo)識(shí)符。
49.C++中含有四個(gè)關(guān)鍵字用于強(qiáng)制類型轉(zhuǎn)換:
(1)static_cast強(qiáng)制類型轉(zhuǎn)換
.用于基本類型間的轉(zhuǎn)換,但不能用于基本類型指針間的轉(zhuǎn)換
.用于有繼承關(guān)系類對(duì)象之間的轉(zhuǎn)換和類指針之間的轉(zhuǎn)換
------static_cast是編譯期進(jìn)行轉(zhuǎn)換的,無(wú)法再運(yùn)行時(shí)檢測(cè)類型,所以類類型之間的轉(zhuǎn)換可能存在風(fēng)險(xiǎn)
int i=0; char c='c'; c=static_cast(i); (2)const_cast強(qiáng)制類型轉(zhuǎn)換
.用于去除變量的const屬性
const int& j=1; int& k=const_cast(j); (3)reinterpret_cast強(qiáng)制類型轉(zhuǎn)換
.用于指針類型間的強(qiáng)制轉(zhuǎn)換
.用于整數(shù)和指針類型間的強(qiáng)制轉(zhuǎn)換
reinterpret_cast直接從二進(jìn)制進(jìn)行復(fù)制,是一種極其不安全的轉(zhuǎn)換
(4)dynamic_cast強(qiáng)制類型轉(zhuǎn)換
.主要用于類型層次間的轉(zhuǎn)換,還可以用于類之間的交叉轉(zhuǎn)換
.dynamic_cast具有類型檢查的功能,比static_cast更安全
50.只有字面量初始化的const常量才會(huì)進(jìn)入符號(hào)表
51.被volatile修飾的const常量不會(huì)進(jìn)入符號(hào)表
52.const引用的類型與初始化變量的類型
53.指針與引用的區(qū)別:
(1)指針是一個(gè)變量,其值為一個(gè)內(nèi)存地址,通過(guò)指針可以訪問(wèn)對(duì)應(yīng)內(nèi)存地址中的值
(2)引用只是一個(gè)變量的新名字,所以對(duì)引用的操作(賦值,取地址等)都會(huì)傳遞到其引用的變量上
(3)指針可以被const修飾成為常量或者只讀變量
(4)const引用使其引用的變量具有只讀屬性
(5)指針就是變量,不需要初始化,也可以指向不同的地址
(6)引用天生就必須在定義時(shí)初始化,之后無(wú)法在引用其他變量
54.C++編譯器對(duì)字面量的處理方式:
(1)整數(shù)型字面量的默認(rèn)類型為int,占用4個(gè)字節(jié)
(2)浮點(diǎn)型字面量的默認(rèn)類型為double,占用8個(gè)字節(jié)
(3)字符型字面量的默認(rèn)類型為char,占用1個(gè)字節(jié)
(4)字符串型字面量的默認(rèn)類型為const char*,占用4個(gè)字節(jié)
55.當(dāng)使用字面量對(duì)變量進(jìn)行初始化或賦值時(shí):
(1)無(wú)溢出產(chǎn)生:編譯器對(duì)字面量進(jìn)行默認(rèn)類型轉(zhuǎn)換
(2)產(chǎn)生溢出:編譯器會(huì)做截?cái)嗖僮?,并產(chǎn)生警告
56.C編譯器編譯后不會(huì)再函數(shù)名中加上參數(shù)的信息,而C++為了支持重載加上了函數(shù)參數(shù)的信息。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。
文章名稱:C++基礎(chǔ)-創(chuàng)新互聯(lián)
文章網(wǎng)址:http://weahome.cn/article/dcosjg.html