亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C++ > 正文

C++第11版本中的一些強大的新特性小結

2020-05-23 14:11:36
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了C++第11版本中的一些強大的新特性小結,需要的朋友可以參考下
 

Auto Type Deduction 自動類型推導

auto 關鍵字讓用戶得以使用 C++ 內置的類型推導特性。

std::string something = somethingthatreturnsastring.getString();auto something = somethingthatreturnsastring.getString();

Auto 關鍵字會對上述自變量(something)進行自動推導,得出其應該是 string 類型的結論,并在 auto 出現的地方用正確的類型進行替換。這個特性對迭代器特別有用。

for(std::vector<T>::iterator it = x.begin(); it != x.end(); i++){  it->something();}

上述代碼可以寫成:

for(auto it = x.begin(); it != x.end(); i++){  it->something();}

贊! 代碼看上去簡潔多了!

Strongly Typed Enums 強類型枚舉

這個特性可以有效避免枚舉類型的命名沖突,從而消除很多潛在的 bug。在舊版本的 C++ 中,程序員必須為每一個枚舉項設定一個全局唯一的名字。例如,如果你給一個枚舉項取名叫 None,那么其他的枚舉集合就不能再用這個名字了。但是現在,你可以這么做了?。ㄗg注:作者下面給的例子仿佛和上面的文字不是非常搭配//myEnum ::All 和 myEnum::All是不是存在差異?)

enum class myEnum {None, One, All};myEnum o = myEnum ::All;auto p = myEnum::All; // 同樣有效

Lambdas 表達式

Lambda 表達式簡單說就是個匿名函數(譯注:原文為in-place function,意思是“用來鑲嵌的函數”,但是匿名函數能更精確表達這個含義)。對于迭代器以及for 循環非常有用,這種函數你只需要在程序的某一處使用一次,所以沒有必要專門在程序里明確定義它。Lambda 表達式并沒有讓 C++ 在邏輯表達上做到“及以往之不可及”的程度,它是一種受函數式編程思想影響而引入的語言特性,能夠讓程序更緊湊。Lambda 表達式的最簡形式是下面這樣的:

[]() { }

加上所有可能的操作符,會是這樣:

[]() mutable -> T { }
其中[]是捕獲列表,()是參數列表,{}是函數體

Capture List 捕獲列表

捕獲列表定義了什么類型的東西可以從 Lambda 表達式之外匹配到函數體中來。可以包含以下這些:

一個值:[x]
一個引用 [&x]
當前范圍內任意變量的引用 [&]
同3,但是通過變量的值
你可以對上面的各項進行任意混合,只要用逗號隔開即可 [x, &y]

Argument List 參數列表

參數列表和 C++ 函數的參數列表是一個概念。

Function Body 函數體

函數體是指在 Lambda 表達式被調用時真正執行的代碼。

Return Type Deduction

返回值推斷

如果 Lambda 表達式只有一個返回聲明,那么返回值類型就可以省略,其類型就是隱式類型:decltype(return_statement)

可變 Labmda

如果一個 Lambda 表達式被標記為 mutable(例如:[]() mutable{ }),那么對于按值捕獲的數值來說,在函數體內就允許對這些值進行修改操作。

下面舉個例子:

int main(){  char s[]="Hello World!";  int Uppercase = 0; //lambda會改變這個變量的值  for_each(s, s+sizeof(s), [&Uppercase] (char c) {  if (isupper(c))   Uppercase++;  }); cout<< Uppercase<<" uppercase letters in: "<< s<<endl;}

Unique 指針

Unique 指針是 C++11 版本的智能指針類。

一旦你用 unique_ptr 關鍵字定義了一個對象,那么下列事件只要發生一個,對象就會被銷毀并釋放內存:

unique_ptr 管理的對象被銷毀。
unique_ptr 管理的對象通過賦值操作符指向另一個指針,或調用了reset()方法。
對于不想了解太多細節的用戶來說,這就意味著如果你使用了 unique 指針的語義,那么在跳出作用域之前,你就不用手動回收對象的內存了。

以前,我們需要這么寫代碼:

YourObject * obj = new YourObject();

然后在程序的最后你一定要記得釋放內存:

delete(obj);
否則你可就造成內存泄露了。而現在,

std::unique_ptr<YourObject> obj(new YourObject());

當 obj 跳出作用域范圍之外的時候,內存將會被自動回收。

static_assert

static_assert 簡單說就是一個在編譯期執行的斷言。例如,你可以這么做:

static_assert(sizeof(unsigned int) * CHAR_BIT == 32);

假設由于系統的原因造成了上述的邏輯判斷的失敗,那么 static_assert 就會斷言失敗。

它的另一種用途,是和 C++ 特征類型搭配使用。比如:

static_assert(std::is_pod<yourstruct>::value, "Not a pod struct!");

POD 是指“簡單數據”(Plain Old Data)結構,也就是說,它是一個的類(你可以用struct關鍵字定義,也可以用class關鍵字定義),但沒有構造函數,析構函數和虛成員函數。所以,如果一個愚蠢的菜鳥程序員企圖給這種類型增加構造函數的話,static_assert 就會在編譯的時候阻止這種行為,并報錯。這對代碼維護來說可是非常有用的。



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
热re99久久精品国产66热| 在线色欧美三级视频| 国产精品视频播放| 69久久夜色精品国产69| 69**夜色精品国产69乱| 国产噜噜噜噜久久久久久久久| 久久精品在线播放| 久久精品99国产精品酒店日本| 黑人巨大精品欧美一区二区| 国产亚洲欧洲高清| 亚洲女性裸体视频| 亚洲人成伊人成综合网久久久| 国产成人精品视频| 日韩欧美一区二区在线| 欧美一区二区三区免费观看| 久久精视频免费在线久久完整在线看| 青青在线视频一区二区三区| 午夜精品久久久久久久99黑人| 亚洲成人久久久久| 精品日本高清在线播放| 91a在线视频| 日韩av网址在线观看| 高清欧美性猛交xxxx| 国产精品精品一区二区三区午夜版| 亚洲无限乱码一二三四麻| 亚洲人成网站免费播放| 国产在线拍揄自揄视频不卡99| 亚洲综合日韩在线| 中文字幕日韩精品在线| 欧洲美女免费图片一区| 国产精品嫩草影院一区二区| 18性欧美xxxⅹ性满足| 国产精品亚洲视频在线观看| 97精品视频在线播放| 欧美福利视频在线| 精品福利一区二区| 日韩精品中文字幕在线| 亚洲精品久久久久久久久| 久久亚洲精品国产亚洲老地址| 日韩av中文在线| 午夜欧美不卡精品aaaaa| 深夜福利日韩在线看| 亚洲欧美日韩国产成人| 久久精品国产清自在天天线| 91精品久久久久久久久中文字幕| 欧美亚洲成人免费| 亚洲欧美精品一区二区| 欧美成人国产va精品日本一级| 亚洲色图15p| 国产成人精品视频在线观看| 国内精品小视频| 久久91亚洲精品中文字幕奶水| 国产欧美va欧美va香蕉在线| 欧美精品videosex性欧美| 久久精品国产欧美激情| 亚洲人成电影网站| 欧美巨乳在线观看| 精品在线欧美视频| 欧美激情一区二区三区成人| 在线日韩欧美视频| 久久视频在线直播| 国产日本欧美在线观看| 欧美在线免费观看| 热草久综合在线| 91精品国产91久久久久| 91免费福利视频| 亚洲成人中文字幕| 日韩av资源在线播放| 日韩av在线一区二区| 亚洲欧美在线磁力| 亚洲一级一级97网| 欧美xxxx18性欧美| 丝袜亚洲欧美日韩综合| 中文字幕久久精品| 中文欧美日本在线资源| 亚洲欧美日韩一区二区三区在线| 91精品国产777在线观看| 亚洲精品国产电影| 亚洲国产欧美在线成人app| 国产精品96久久久久久又黄又硬| 日本中文字幕不卡免费| 亚洲国产精品成人一区二区| 欧美精品激情视频| 久久精品久久精品亚洲人| 亚洲综合最新在线| 在线精品播放av| 国产精品jvid在线观看蜜臀| 久久99精品久久久久久噜噜| 国产精品视频导航| 亚洲精品影视在线观看| 日韩大陆毛片av| 久热在线中文字幕色999舞| 日韩成人免费视频| 亚洲人成电影在线观看天堂色| 亚洲欧美在线x视频| 国产91在线高潮白浆在线观看| 欧美精品在线播放| 九九热r在线视频精品| 日韩av电影国产| 成人免费视频在线观看超级碰| 日韩h在线观看| 亚洲精品资源美女情侣酒店| 97色在线视频观看| 色偷偷888欧美精品久久久| 国产激情999| 97国产精品久久| 亚洲自拍av在线| 91精品国产99久久久久久| 久久久亚洲福利精品午夜| 久久久久久久久久久人体| 亚洲视频一区二区| 国产精品精品久久久| 日日噜噜噜夜夜爽亚洲精品| 国产有码在线一区二区视频| 理论片在线不卡免费观看| 免费成人高清视频| 欧美精品精品精品精品免费| 亚洲国产精品女人久久久| 美女久久久久久久| 日韩电影免费在线观看中文字幕| 97人人模人人爽人人喊中文字| 136fldh精品导航福利| 亚洲在线免费观看| 精品久久久久久久中文字幕| 精品露脸国产偷人在视频| 久久人人97超碰精品888| 亚洲一品av免费观看| 国产综合视频在线观看| 欧美大片免费观看在线观看网站推荐| 久久精品成人欧美大片古装| 久久国产视频网站| 精品毛片网大全| 精品香蕉一区二区三区| 欧美成人激情在线| 国产精品v片在线观看不卡| 久久精品国产2020观看福利| 最新91在线视频| 一区二区三欧美| 日韩精品亚洲精品| 91欧美精品成人综合在线观看| 久久影视免费观看| 欧美日韩亚洲系列| 国产一区二区三区免费视频| 久久久视频精品| 国产精品亚洲视频在线观看| 日韩免费av片在线观看| 欧美在线视频观看免费网站| 欧美日韩ab片| 欧美一级大胆视频| 欧美亚州一区二区三区| 亚洲精品午夜精品| 亚洲乱码一区二区| 精品福利免费观看| 午夜精品久久久久久久久久久久| 久久天天躁狠狠躁夜夜av| 亚洲第一二三四五区| 亚洲精品电影网站| 亚洲男人7777| 欧美成在线视频| 久久久久久久久91| 国产精品日韩精品| 91精品视频专区| 亚洲色图五月天| 亚洲精品综合久久中文字幕|