https://blog.csdn.net/jiange_zh/article/details/79356417
1.__ func __預(yù)定義標(biāo)識(shí)符:
基本功能:return fund ;返回當(dāng)前函數(shù)名稱
2._Pragma操作符:
Pragma ( 字符串字面量 ) 向編譯器傳遞額外信息
3.lambda表達(dá)式:
[ 函數(shù)對(duì)象參數(shù) ] (操作符重載函數(shù)參數(shù)) mutable或exception聲明 ->返回值類型 {函數(shù)體}
3.1[ ] 必須存在冬三,分為幾種類型:
·空 無函數(shù)對(duì)象參數(shù)
·= 可使用lambda函數(shù)體所在范圍年內(nèi)所有可見的局部變量(包括this),以傳值方式進(jìn)行
·& 可使用lambda函數(shù)體所在范圍年內(nèi)所有可見的局部變量(包括this)扒俯,以傳引用方式進(jìn)行
·this 函數(shù)體內(nèi)可使用lambda所在類中成員變量
·a 將a按值傳遞
·&a 將a按引用傳遞
·a,&b 將a按值傳遞箭养,b按引用傳遞
·=垒拢,&a,&b 將a,b按引用傳遞矿咕,其余按值傳遞
·&技羔,a,b 將a,b按值傳遞喷好,其余按引用傳遞
3.2()如沒有可以省略蚀同,其余則按照傳值或傳引用方式進(jìn)行處理
3.3 mutable或exception聲明唬血,可省略。加上mutable后可修改傳進(jìn)來的拷貝(注意不是原始值)唤崭;exception指定拋出的異常拷恨,可用catch(int)接收
3.4->返回值類型,當(dāng)返回值為void或只有一處return時(shí)可省略
3.5{}函數(shù)體谢肾,不能省略腕侄,但可為空
4.nullptr:
nullptr為任意類型的空指針類型
傳統(tǒng)意義上C++會(huì)直接將NULL定義為0,對(duì)不同的編輯器來說芦疏,有的會(huì)直接設(shè)置為0冕杠,有的會(huì)設(shè)置為((void*)0),因此可能會(huì)出現(xiàn)函數(shù)重載錯(cuò)誤的情況酸茴,如下:
void fun(int a);
void fun(int *a);
int * b=NULL;
當(dāng)調(diào)用fun(b)時(shí)部分編譯器下會(huì)直接調(diào)用fun(int a)的形式分预,造成混亂,為了解決這種情況,C++11引入了nullptr薪捍,可以隱式轉(zhuǎn)換為任何類型指針笼痹,以此區(qū)分NULL和0之間的混亂關(guān)系。
5.auto與decltype
使用auto可以讓編譯器自動(dòng)推斷當(dāng)前變量類型(無法推導(dǎo)數(shù)組類型酪穿,無法作為函數(shù)傳參類型)
用法:
vector<int>count(10,1);
for(auto k:count) //此處k為int型變量
由于auto關(guān)鍵字在推導(dǎo)類型時(shí)存在缺陷凳干,因此引入了decltype關(guān)鍵字,用法和sizeof相似被济,為:decltype(表達(dá)式)救赐,返回值為類型,但是不進(jìn)行計(jì)算
6.拖尾返回類型
在泛型函數(shù)中對(duì)返回值進(jìn)行確認(rèn)時(shí)直接使用decltype會(huì)發(fā)生錯(cuò)誤只磷,為了應(yīng)對(duì)這一情況经磅,C++11新增了拖尾型返回類型泌绣,用法如下:
template<typename T, typename U>
auto add(T x, U y) -> decltype(x+y) {
return x+y;
}
7.外部模板
傳統(tǒng)C++中只要遇到了被完整定義的模板,便會(huì)直接進(jìn)行實(shí)例化预厌。C++11中進(jìn)行了外部模板的引入阿迈,能夠顯式的告訴編譯器何時(shí)進(jìn)行模板的實(shí)例化。