日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

30分钟了解C 11新特性

發布時間:2023/12/2 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 30分钟了解C 11新特性 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

什么是C 11

C 11是曾經被叫做C 0x,是對目前C 語言的擴展和修正,C 11不僅包含核心語言的新機能,而且擴展了C 的標準程序庫(STL),并入了大部分的C Technical Report 1(TR1)程序庫(數學的特殊函數除外)。

C 11包括大量的新特性:包括lambda表達式,類型推導關鍵字auto、decltype,和模板的大量改進。

本文將對C 11的以上新特性進行簡單的講解,以便大家能夠快速了解到C 11對C 的易用性方面祈禱的巨大作用。

新的關鍵字

auto

C 11中引入auto***種作用是為了自動類型推導

auto的自動類型推導,用于從初始化表達式中推斷出變量的數據類型。通過auto的自動類型推導,可以大大簡化我們的編程工作

auto實際上實在編譯時對變量進行了類型推導,所以不會對程序的運行效率造成不良影響

另外,似乎auto并不會影響編譯速度,因為編譯時本來也要右側推導然后判斷與左側是否匹配。

auto?a;?//?錯誤,auto是通過初始化表達式進行類型推導,如果沒有初始化表達式,就無法確定a的類型??auto?i?=?1;??auto?d?=?1.0;??auto?str?=?"Hello?World";??auto?ch?=?'A';??auto?func?=?less();??vector?iv;??auto?ite?=?iv.begin();??auto?p?=?new?foo()?//?對自定義類型進行類型推導

auto不光有以上的應用,它在模板中也是大顯身手,比如下例這個加工產品的例子中,如果不使用auto就必須聲明Product這一模板參數:

template???void?processProduct(const?Creator&?creator)?{??????Product*?val?=?creator.makeobject();??????//?do?somthing?with?val??}?????????????????.

如果使用auto,則可以這樣寫:

template???void?processProduct(const?Creator&?creator)?{??????auto?val?=?creator.makeobject();??????//?do?somthing?with?val??}

拋棄了麻煩的模板參數,整個代碼變得更加正解了。

decltype

decltype實際上有點像auto的反函數,auto可以讓你聲明一個變量,而decltype則可以從一個變量或表達式中得到類型,有實例如下:

int?x?=?3;??decltype(x)?y?=?x;

有人會問,decltype的實用之處在哪里呢,我們接著上邊的例子繼續說下去,如果上文中的加工產品的例子中我們想把產品作為返回值該怎么辦呢?我們可以這樣寫:

template???auto?processProduct(const?Creator&?creator)?->?decltype(creator.makeobject())?{??????auto?val?=?creator.makeobject();??????//?do?somthing?with?val??}

nullptr

nullptr是為了解決原來C 中NULL的二義性問題而引進的一種新的類型,因為NULL實際上代表的是0,

void?F(int?a){??????cout<<a<<endl;??}???void?F(int?*p){??????assert(p?!=?NULL);???????cout<<?p?<<endl;??}???int?main(){???????int?*p?=?nullptr;??????int?*q?=?NULL;??????bool?equal?=?(?p?==?q?);?//?equal的值為true,說明p和q都是空指針??????int?a?=?nullptr;?//?編譯失敗,nullptr不能轉型為int??????F(0);?//?在C 98中編譯失敗,有二義性;在C 11中調用F(int)??????F(nullptr);???????return?0;??}

序列for循環

在C 中for循環可以使用類似java的簡化的for循環,可以用于遍歷數組,容器,string以及由begin和end函數定義的序列(即有Iterator),示例代碼如下:

map?m{{"a",?1},?{"b",?2},?{"c",?3}};??for?(auto?p?:?m){??????cout<<p.first<<"?:?"<<p.second<<endl;??}

Lambda表達式

lambda表達式類似javascript中的閉包,它可以用于創建并定義匿名的函數對象,以簡化編程工作。Lambda的語法如下:

[函數對象參數](操作符重載函數參數)->返回值類型{函數體}

vector?iv{5,?4,?3,?2,?1};??int?a?=?2,?b?=?1;???for_each(iv.begin(),?iv.end(),?[b](int?&x){cout<<(x? ?b)<int{return?x?*?(a? ?b);});//?(3)
  • []內的參數指的是Lambda表達式可以取得的全局變量。(1)函數中的b就是指函數可以得到在Lambda表達式外的全局變量,如果在[]中傳入=的話,即是可以取得所有的外部變量,如(2)和(3)Lambda表達式

  • ()內的參數是每次調用函數時傳入的參數。

  • ->后加上的是Lambda表達式返回值的類型,如(3)中返回了一個int類型的變量

變長參數的模板

我們在C 中都用過pair,pair可以使用make_pair構造,構造一個包含兩種不同類型的數據的容器。比如,如下代碼:

auto?p?=?make_pair(1,?"C ?11");

由于在C 11中引入了變長參數模板,所以發明了新的數據類型:tuple,tuple是一個N元組,可以傳入1個, 2個甚至多個不同類型的數據

auto?t1?=?make_tuple(1,?2.0,?"C ?11");??auto?t2?=?make_tuple(1,?2.0,?"C ?11",?{1,?0,?2});

這樣就避免了從前的pair中嵌套pair的丑陋做法,使得代碼更加整潔

另一個經常見到的例子是Print函數,在C語言中printf可以傳入多個參數,在C 11中,我們可以用變長參數模板實現更簡潔的Print

template??void?Print(Head?head,?typename...?tail)?{??????cout<<?head?<<endl;??????Print(tail...);??}

Print中可以傳入多個不同種類的參數,如下:

Print(1,?1.0,?"C 11");

更加優雅的初始化方法

在引入C 11之前,只有數組能使用初始化列表,其他容器想要使用初始化列表,只能用以下方法:

int?arr[3]?=?{1,?2,?3}??vector?v(arr,?arr? ?3);

在C 11中,我們可以使用以下語法來進行替換:

int?arr[3]{1,?2,?3};??vector?iv{1,?2,?3};??map{{1,?"a"},?{2,?"b"}};??string?str{"Hello?World"};

來源:http://my.oschina.net/wangxuanyihaha/blog/183151

總結

以上是生活随笔為你收集整理的30分钟了解C 11新特性的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 亚州av综合色区无码一区 | 国产一区二区在线视频观看 | 欧美裸体视频 | 天天摸天天做天天爽 | 99久久久无码国产精品免费麻豆 | 探花视频在线免费观看 | 秋霞av鲁丝片一区二区 | 国产制服av | 中午字幕在线观看 | 在线一区二区观看 | av乱码| 欧美日韩中文在线观看 | 动漫美女露胸网站 | 亚洲精品影院在线 | 日本一区二区三区在线观看视频 | 欧美一区二区三区免 | 日韩国产欧美一区 | 精品国产一区在线 | 成人动漫h在线观看 | 国产在线1区 | 日韩一区在线观看视频 | 午夜婷婷网 | 在线黄色免费 | 有奶水的迷人少妇 | 日本激情免费 | 久久久观看 | 吻胸摸激情床激烈视频大胸 | 欧美激情一区二区三区在线 | 天天操综合| 在线观看黄色网页 | 欧美一区二区国产 | www.四虎在线 | 久久久久久久精 | 青青草原亚洲视频 | 日日草草 | 日韩三级一区二区三区 | 午夜黄色福利视频 | 动漫美女被吸乳奶动漫视频 | 亚洲国产精品成人无久久精品 | aav在线| 成人av电影在线播放 | 夜夜躁狠狠躁日日躁av | 婷婷亚洲视频 | 久久久久久国产精品视频 | 国产伦理自拍 | 五十路六十路七十路熟婆 | 免费一级特黄特色毛片久久看 | 两个女人互添下身爱爱 | 欧美黑粗硬| 中文字幕在线视频网站 | 一区二区三区免费看 | 自拍欧美日韩 | 在线资源站 | 麻豆一区二区99久久久久 | 偷拍亚洲欧美 | 亚洲一卡一卡 | 韩国一区二区在线观看 | 黑人操亚洲女 | 国产精品福利一区 | 欧美乱妇15p| 久久久精品日韩 | 伊人精品在线观看 | 国产免费无遮挡 | 欧美自拍偷拍一区 | 国产免费激情视频 | 三女警花合力承欢猎艳都市h | 国产青青草 | 日韩免费淫片 | 精品欧美乱码久久久久久 | 国产精品99精品久久免费 | 亚洲乱码国产乱码精品精 | av不卡免费在线 | 激情五月婷婷久久 | 久久免费看少妇高潮v片特黄 | 天天尻| 秋霞在线视频 | 国产一区中文 | 91网在线观看 | 国产后入清纯学生妹 | 极品久久久久久 | 91免费在线观看网站 | 国产精欧美一区二区三区白种人 | 老熟妇高潮一区二区三区 | 中文字幕免费一区 | 99精品一区| 麻豆成人久久精品一区二区三区 | 国产成人三级在线观看视频 | 国产精品高清在线观看 | 国产另类av| 午夜免费毛片 | 久久成人人人人精品欧 | 天天干天天操天天碰 | 亚洲国产精品成人va在线观看 | 毛片h| 日日艹夜夜艹 | 精品人伦一区二区三区蜜桃网站 | 黄色大片毛片 | 18日本xxxxxxxxx95 国产又好看的毛片 | 视频在线观看免费大片 |