以inline修飾的函數(shù)叫做內(nèi)聯(lián)函數(shù),在編譯的時(shí)候,
C++的編譯器會(huì)將內(nèi)聯(lián)函數(shù)展開(kāi)在調(diào)用內(nèi)聯(lián)函數(shù)的地方
(不是無(wú)條件的展開(kāi),這取決于編譯器,后面有詳細(xì)分析),這沒(méi)有函數(shù)壓棧的開(kāi)銷(xiāo),
所以?xún)?nèi)聯(lián)函數(shù)可以提升程序運(yùn)行的效率。
特性inline是一種以空間換時(shí)間的做法,雖然省去了函數(shù)調(diào)用的系統(tǒng)開(kāi)銷(xiāo),
但是展開(kāi)代碼使得代碼量增加,所以,在代碼很長(zhǎng),或者有循環(huán)和遞歸的函數(shù)
就不適宜使用內(nèi)聯(lián)函數(shù)了,即使使用了編譯器也會(huì)判斷是否適合展開(kāi),
有的編譯器認(rèn)為,代碼超過(guò)十行命令就是長(zhǎng)代碼,就不會(huì)展開(kāi)內(nèi)聯(lián)。
inline內(nèi)聯(lián)不建議將聲明和定義分離,分離之后會(huì)導(dǎo)致鏈接出現(xiàn)錯(cuò)誤,
因?yàn)閕nline被展開(kāi)之后,就沒(méi)有函數(shù)地址了,鏈接的時(shí)候會(huì)找不到函數(shù)地址。
auto關(guān)鍵字在C語(yǔ)言中沒(méi)有什么價(jià)值,
在C++11中,auto有了新的含義:
auto不再是一個(gè)存儲(chǔ)類(lèi)型指示符,而是作為一個(gè)新的類(lèi)型指示符來(lái)指示編譯器,
auto聲明的變量必須由編譯器在編譯時(shí)期推導(dǎo)而得。
說(shuō)通俗一點(diǎn)就是,auto可以自動(dòng)識(shí)別變量的類(lèi)型,下面簡(jiǎn)單的驗(yàn)證一下
需要注意的是:使用auto定義變量時(shí)必須對(duì)其進(jìn)行初始化,
因?yàn)樵诰幾g階段編譯器需要根據(jù)初始化的內(nèi)容來(lái)推導(dǎo)auto的類(lèi)型是什么。
所以說(shuō),auto不是一種類(lèi)型聲明,而是一個(gè)類(lèi)型聲明的“占位符”,
編譯器編譯的時(shí)候就將auto替換成實(shí)際的類(lèi)型。
auto使用的一些規(guī)則auto可以和指針和引用結(jié)合使用,
auto定義指針類(lèi)型時(shí),用auto和auto*沒(méi)有任何區(qū)別,
但用auto聲明引用類(lèi)型時(shí)則必須加&
當(dāng)在同一行聲明多個(gè)變量時(shí),這些變量必須是相同的類(lèi)型,否則編譯器將會(huì)報(bào)錯(cuò),
因?yàn)榫幾g器實(shí)際只對(duì)第一個(gè)類(lèi)型進(jìn)行推導(dǎo),然后用推導(dǎo)出來(lái)的類(lèi)型定義其他變量。
auto也不是所有的地方都可以使用,
auto不可以作為函數(shù)的參數(shù)
auto不可以用來(lái)聲明數(shù)組類(lèi)型
auto的實(shí)際用法并不是簡(jiǎn)單的像上面的使用,
當(dāng)變量的類(lèi)型名很長(zhǎng)的時(shí)候就很適合用auto,還有其他的用法在后續(xù)的學(xué)習(xí)再了解。
對(duì)于一個(gè)有范圍的集合而言,由程序員來(lái)說(shuō)明循環(huán)的范圍是多余的,有時(shí)候還會(huì)容易犯錯(cuò)誤。
因此C++11中引入了基于范圍的for循環(huán)。
for循環(huán)后的括號(hào)由冒號(hào)“ :”分為兩部分:
第一部分是范圍內(nèi)用于迭代的變量,
第二部分則表示被迭代的范圍。
int main()
{//遍歷數(shù)組
int arr[] = {1,2,3,4,5,6,7,8,9 };
//平常做法
for (int i = 0; i< sizeof(arr) / sizeof(int); i++)
{cout<< arr[i]<< " ";
}
cout<< endl;
//范圍for
for (auto ret: arr)
{cout<< ret<< " ";
}
return 0;
}
范圍for也和普通的循環(huán)類(lèi)似,可以用continue結(jié)束本次循環(huán),用break跳出整個(gè)循環(huán)。
范圍for的使用條件for循環(huán)迭代的范圍必須是確定的,
對(duì)于數(shù)組來(lái)說(shuō),就是數(shù)組中的第一個(gè)元素和最后一個(gè)元素。
對(duì)于類(lèi)來(lái)說(shuō),就要提供確定開(kāi)頭begin和結(jié)尾end的方法,[begin,end]就是循環(huán)迭代的范圍。
在C語(yǔ)言中,對(duì)于指針的初始化,一般都是給NULL,
NULL實(shí)際是一個(gè)宏,在傳統(tǒng)的C頭文件(stddef.h)中,可以看到如下代碼:
#ifndef NULL
#ifdef __cplusplus
#define NULL 0
#else
#define NULL ((void *)0)
#endif
#endif
這就是條件編譯的應(yīng)用了,NULL定義為字面常量0,或者被定義為無(wú)類(lèi)型指針(void*)的常量。
在C語(yǔ)言中使用NULL來(lái)對(duì)指針進(jìn)行置空沒(méi)有任何問(wèn)題,但是在C++中,可能會(huì)出現(xiàn)問(wèn)題
在這段代碼中,我想要調(diào)用的函數(shù)應(yīng)該是指針的Func(),
但是NULL被定義成了0,所以就調(diào)用了別的函數(shù)。
在C++98中,字面常量0既可以是一個(gè)整形數(shù)字,也可以是無(wú)類(lèi)型的指針(void*)常量,
但是編譯器默認(rèn)情況下將其看成是一個(gè)整形常量,
如果要將其按照指針?lè)绞絹?lái)使用,必須對(duì)其進(jìn)行強(qiáng)制類(lèi)型轉(zhuǎn)換(void *)0。
所以在C++中,指針的置空更推薦使用nullptr,
使用nullptr的時(shí)候不用包含頭文件,這是C++11的關(guān)鍵字,
在C++11中,sizeof(nullptr)與sizeof((void)0)所占的字節(jié)數(shù)相同
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧
網(wǎng)站標(biāo)題:初識(shí)C++(4)---C++入門(mén)-創(chuàng)新互聯(lián)
標(biāo)題網(wǎng)址:http://jinyejixie.com/article26/dejicg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制網(wǎng)站、手機(jī)網(wǎng)站建設(shè)、Google、微信小程序、網(wǎng)站維護(hù)、品牌網(wǎng)站制作
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容