C++11已不是新鮮技術(shù),但對于我來說,工作中用得還不夠多(前東家長時(shí)間使用gcc3.4.5,雖然去年升了4.8.2,但舊模塊維護(hù)還是3.4.5居多;新東家用的是4.4.6,不能完整支持C++11,而且有內(nèi)部有基礎(chǔ)庫早已支持了C++11 STL的部分功能),再加上自己的練習(xí)也寫得少,了解僅是幾點(diǎn)簡單的皮毛,這里對C++11學(xué)習(xí)總結(jié)一番,期望對他人以及未來的我有點(diǎn)技術(shù)知識(shí)索引上的幫助。
首先,wiki是最全面的:https://en.wikipedia.org/wiki/C%2B%2B11,這是C++完整的新功能,個(gè)人使用的編譯器可能不完整支持,可以看這個(gè)編譯器+版本對C++1X的支持情況:http://en.cppreference.com/w/cpp/compiler_support 。
然后,看英文不夠快,找一篇看起來比較全的中文總結(jié)(不全,還是要看wiki):http://www.cnblogs.com/pzhfei/archive/2013/03/02/CPP_new_feature.html 。
一、新特性簡介
C++11之前被稱為C++0x,因?yàn)樵居?jì)劃在2010年發(fā)布,所以之前一些編譯器使用C++11的編譯參數(shù)是:-std=c++0x,后面使用:-std=c++11。C++11 設(shè)計(jì)的核心是:少改動(dòng)語言,多改動(dòng)基礎(chǔ)庫。
改動(dòng)涉及到這幾點(diǎn):支持多線程編程(增加了thread庫)、加強(qiáng)泛型編程(增量了hash容器、任意多個(gè)元素的tuple、bind函數(shù)、lambda函數(shù))、統(tǒng)一初始化(以花括號(hào)調(diào)用構(gòu)造函數(shù))、性能(右值引用和move),其它stl庫(正則表達(dá)式、原子操作庫),另外還有一些語法糖的支持,如:default、delete定義(可以在派生類中delete掉基類的public函數(shù)),裸字符串的定義、類非靜態(tài)成員變量直接賦值、nullptr、支持連續(xù)兩個(gè)右尖括號(hào)、后置返回類型、Range-based的for循環(huán)、構(gòu)造函數(shù)可以調(diào)用另一個(gè)構(gòu)造函數(shù)、override關(guān)鍵字用于發(fā)現(xiàn)虛函數(shù)的覆蓋錯(cuò)誤、string literal.......。
二、部分常用新特性\庫
挑選幾個(gè)常用的記錄如下
1、統(tǒng)一初始化
之前,我想初始化一個(gè)放著map對象的容器,需要這樣子:
std::vector<std::map<std::string, std::string> > a; std::map<std::string, std::string> tmp; tmp.insert(std::make_pair("1", "2")); a.push_back(tmp);
現(xiàn)在,我可以直接用大括號(hào):
std::vector<std::map<std::string, std::string>> a