熟悉的c++,你還認(rèn)識(shí)么震糖?

你該關(guān)注C++11嗎录肯?

很明顯,C++11為C++帶來了大量的新特性试伙。C++11將修復(fù)大量缺陷和降低代碼拖沓嘁信,比如lambda表達(dá)式的支持將使代碼更簡(jiǎn)潔。像移動(dòng)語義這種特性會(huì)提高語言內(nèi)核的基礎(chǔ)效率疏叨,使你可以寫出更快的代碼潘靖。對(duì)模板系統(tǒng)的優(yōu)化可以使你更容易寫出泛型的代碼。

新的標(biāo)準(zhǔn)庫(kù)同時(shí)也會(huì)包含新的特性蚤蔓,包括對(duì)多線程的支持和優(yōu)化智能指針卦溢,后者將給那些還沒用類似于boost::shared_ptr的人提供更簡(jiǎn)單的內(nèi)存管理方法。

我已經(jīng)開始使用新的C++11特性秀又,并且非常喜歡:新的auto關(guān)鍵字单寂,對(duì)模板”>>“寫法的支持,lambda表達(dá)式和新的函數(shù)定義語法吐辙。

C++11是如何開發(fā)出來的宣决?

C++11的出現(xiàn),首先要感謝C++標(biāo)準(zhǔn)委員會(huì)的辛勤工作昏苏,一群來自學(xué)術(shù)界和工業(yè)界的專家尊沸,他們的多次會(huì)晤攻克難題威沫,終于設(shè)計(jì)出了一種跨平臺(tái),被多種編譯器支持洼专,可以生成高效易維護(hù)代碼的語言棒掠。而C++11新標(biāo)準(zhǔn),就像對(duì)靈活強(qiáng)大的C++的一次不可思議的擴(kuò)展屁商。

C++11包括什么烟很?

更易用的語言

使用過C++11后,我發(fā)現(xiàn)它提供了大量的基礎(chǔ)方法使C++變成了一種更易使用的語言蜡镶。這不是說它變成了簡(jiǎn)單的語言—這里有大量的新特性—提供了大量的方法使編程更容易雾袱。讓我們看一個(gè)例子,auto關(guān)鍵字帽哑。在C++11中谜酒,假如編譯器可以從變量的初始化中得到它的類型叹俏,那么你不必要指定類型妻枕。比如:

編譯器可以推導(dǎo)出y的類型是int。當(dāng)然粘驰,這不是一個(gè)證明auto有用的一個(gè)閃亮的例子屡谐。當(dāng)使用模板特別是STL時(shí)auto很好用。為什么這么說蝌数,想象使用一個(gè)迭代器(iterator):

現(xiàn)在你想遍歷address_book中的元素愕掏,要這樣做,你需要一個(gè)迭代器:

map::iteratoriter=address_book.begin();

這是一個(gè)恐怖的長(zhǎng)類型聲明顶伞,當(dāng)你已經(jīng)知道這個(gè)類型的時(shí)候饵撑。這樣是不是簡(jiǎn)潔多了:

auto ? iter=address_book.begin();

代碼變得更簡(jiǎn)單明了,我覺得可讀性也更高了唆貌,因?yàn)槟0逭Z法使這一行其它內(nèi)容變模糊了滑潘。這是我特別喜歡的一個(gè)特性,我發(fā)現(xiàn)它消除了許多頭疼和難以追蹤的編譯錯(cuò)誤锨咙,節(jié)省了時(shí)間而沒有丟掉表達(dá)式的意思语卤。

區(qū)間迭代(range-based for loop)

下面迭代器的例子是C++11提供的一種處理迭代的更好方法,有些人叫做區(qū)間迭代(基本上所有的現(xiàn)代語言都支持)酪刀。這個(gè)例子足夠證明這種語法是多么優(yōu)雅:

vectorvec;vec.push_back(10);vec.push_back(20);for(int&i:vec){cout<

你需要做的就是給出一個(gè)變量和要迭代的區(qū)間粹舵。但是如果你想迭代一個(gè)map怎么辦?你怎么設(shè)置map中值的類型骂倘?你知道vector值的類型是int眼滤。但map的值類型是pair,通過.first和.second給你提供鍵和值历涝。但是用auto诅需,你根本無需關(guān)心確切類型情妖,你可以簡(jiǎn)單的寫成:

for(autoaddress_entry:address_book){cout<

這將打印出:這是一個(gè)不錯(cuò)的C++11新特性組合用法吧?

我這里還有更易用的優(yōu)化—在以前的C++標(biāo)準(zhǔn)中诱担,假如你寫一個(gè)含有其他模板類型的模板:

vector>vector_of_int_vectors;

你必須在結(jié)束的兩個(gè)’>‘之間添加空格毡证。這不僅煩人,而且當(dāng)你寫成>>而沒有空格時(shí)蔫仙,你將得到困惑和誤導(dǎo)的編譯錯(cuò)誤信息料睛。產(chǎn)生這種行為的原因是C++詞法分析的最大匹配原則(maximal munch rule)。一個(gè)好消息是從今往后摇邦,你再也不用擔(dān)心了:

vector>vector_of_int_vectors;

對(duì)恤煞,這確實(shí)是個(gè)小東西,不過卻是人工代碼克服機(jī)器工具的勝利施籍。另外居扒,這樣寫就不那么丑了。

多線程

這是第一次丑慎,C++11將包含一種內(nèi)存模型和對(duì)應(yīng)的多線程庫(kù)喜喂,這意味著你將可以編寫符合標(biāo)準(zhǔn)的多線程代碼。新標(biāo)準(zhǔn)將提供所有的通用線程方法竿裂,比如線程玉吁、線程局部存儲(chǔ)和原子操作。它也提供了一系列有趣的特性:futures和promises腻异。futures和promises的主要思想是进副,你可以編寫代碼表示,“這個(gè)對(duì)象悔常,一個(gè)future代碼還沒計(jì)算完的結(jié)果”影斑,它將可以在后臺(tái)計(jì)算結(jié)果。當(dāng)這個(gè)值需要的時(shí)候机打,你向future發(fā)請(qǐng)求矫户,假如這個(gè)值準(zhǔn)備好了,那就可以得到它姐帚,要不然繼續(xù)等待吏垮。

我將在后續(xù)的文章中深入探討多線程。

還有好多其他的東西

C++11特性的數(shù)量是客觀的罐旗。你可以閱讀維基百科里的C++11頁(yè)面膳汪,而我計(jì)劃在這一系列文章中深入探索這些特性,包括:

如何用auto九秀、decltype和新的函數(shù)語法編寫更好的代碼

Lambda表達(dá)式

區(qū)間迭代

常量表達(dá)式

右值引用和移動(dòng)語義

nullptr和強(qiáng)類型的枚舉

C++11的編譯器支持

當(dāng)然遗嗽,如果無法使用再好的語言特性又有什么用,好消息是大量的編譯器已經(jīng)開始支持C++11鼓蜒。Apache基金會(huì)整理了一個(gè)列表痹换,列出了C++11的語言特性和編譯器的支持情況:支持C++11的編譯器征字。假如你對(duì)GCC感興趣,這里有GCC4.7支持C++11娇豫。

有些編譯器匙姜,比如GCC,不會(huì)默認(rèn)支持這些新特性—例如冯痢,為了支持C++11特性氮昧,編譯時(shí)必須指定 -std=c++0x。當(dāng)然這也是很有用的浦楣,你可以在你的項(xiàng)目中選擇編譯器和語言集袖肥。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市振劳,隨后出現(xiàn)的幾起案子椎组,更是在濱河造成了極大的恐慌,老刑警劉巖历恐,帶你破解...
    沈念sama閱讀 212,454評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件寸癌,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡夹供,警方通過查閱死者的電腦和手機(jī)灵份,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門仁堪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來哮洽,“玉大人,你說我怎么就攤上這事弦聂∧窀ǎ” “怎么了?”我有些...
    開封第一講書人閱讀 157,921評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵莺葫,是天一觀的道長(zhǎng)匪凉。 經(jīng)常有香客問我,道長(zhǎng)捺檬,這世上最難降的妖魔是什么再层? 我笑而不...
    開封第一講書人閱讀 56,648評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮堡纬,結(jié)果婚禮上聂受,老公的妹妹穿的比我還像新娘。我一直安慰自己烤镐,他們只是感情好蛋济,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,770評(píng)論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著炮叶,像睡著了一般碗旅。 火紅的嫁衣襯著肌膚如雪渡处。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,950評(píng)論 1 291
  • 那天祟辟,我揣著相機(jī)與錄音医瘫,去河邊找鬼。 笑死旧困,一個(gè)胖子當(dāng)著我的面吹牛登下,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播叮喳,決...
    沈念sama閱讀 39,090評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼被芳,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了馍悟?” 一聲冷哼從身側(cè)響起畔濒,我...
    開封第一講書人閱讀 37,817評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎锣咒,沒想到半個(gè)月后侵状,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,275評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡毅整,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,592評(píng)論 2 327
  • 正文 我和宋清朗相戀三年趣兄,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片悼嫉。...
    茶點(diǎn)故事閱讀 38,724評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡艇潭,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出戏蔑,到底是詐尸還是另有隱情蹋凝,我是刑警寧澤,帶...
    沈念sama閱讀 34,409評(píng)論 4 333
  • 正文 年R本政府宣布总棵,位于F島的核電站鳍寂,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏情龄。R本人自食惡果不足惜迄汛,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,052評(píng)論 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望骤视。 院中可真熱鬧鞍爱,春花似錦、人聲如沸尚胞。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)笼裳。三九已至唯卖,卻和暖如春粱玲,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背拜轨。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評(píng)論 1 266
  • 我被黑心中介騙來泰國(guó)打工抽减, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人橄碾。 一個(gè)月前我還...
    沈念sama閱讀 46,503評(píng)論 2 361
  • 正文 我出身青樓卵沉,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親法牲。 傳聞我的和親對(duì)象是個(gè)殘疾皇子史汗,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,627評(píng)論 2 350

推薦閱讀更多精彩內(nèi)容

  • 對(duì)于連續(xù)兩個(gè)右尖括號(hào)>, 那么它們之間需要一個(gè)空格來進(jìn)行分隔停撞,以避免發(fā)生編譯時(shí)的錯(cuò)誤。 C++98編譯器會(huì)把>>優(yōu)...
    認(rèn)真學(xué)計(jì)算機(jī)閱讀 1,207評(píng)論 0 7
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,846評(píng)論 25 707
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理悼瓮,服務(wù)發(fā)現(xiàn)戈毒,斷路器,智...
    卡卡羅2017閱讀 134,637評(píng)論 18 139
  • 突然看到簡(jiǎn)書上的一篇文章《如果時(shí)光倒流 我還是愛你》横堡,具體的內(nèi)容沒有看埋市,看到了這個(gè)題目一瞬間熱淚盈眶。想起一年多來...
    longlong8612009閱讀 288評(píng)論 0 0
  • 【摘要】 這是馬歇爾·盧森堡博士發(fā)明的溝通方式命贴。他獲得2006年地球村基金會(huì)頒發(fā)的和平之橋獎(jiǎng)道宅。 他建議表達(dá)憤怒的四...
    倍課閱讀 307評(píng)論 0 0