c++11中值得關注的幾大變化
◆ lambda表示式
◆自動型別推斷和decltype
◆統一初始化語法
◆ deleted和defaulted函式
◆ nullptr
◆ 委託建構函式
◆ 右值引用
c++11標準庫
c++於2023年以庫技術報告1(tr1)的形式經歷了重大改版,tr1包括新的容器類(unordered_set,unordered_map,unordered_multiset和unordered_multimap)和多個支撐正規表示式、元組和函式物件封裝器等的新庫。隨著c++11標準獲得通過,tr1和自它首次發布以來新增的庫被正式納入標準的c++標準,下面是c++11標準庫的一些特性:
執行緒庫
站在程式設計師的角度來看,c++11最重要的新功能毫無疑問是並行操作,c++11擁有乙個代表執行執行緒的執行緒類,在並行環境中用於同步,async()函式模板啟動並行任務,為執行緒獨特的資料宣告thread_local儲存型別。如果你想找c++11執行緒庫的快速教程,請閱讀anthony william的「c++0x中更簡單的多執行緒」。
新的智慧型指標類
c++98只定義了乙個智慧型指標類auto_ptr,它現在已經被廢棄了,c++11引入了新的智慧型指標類shared_ptr和最近新增的unique_ptr,兩者都相容其它標準庫元件,因此你可以在標準容器內安全儲存這些智慧型指標,並使用標準演算法操作它們。
新的演算法
c++11標準庫定義了新的演算法模仿all_of(),any_of()和none_of()操作,下面列出適用於ispositive()到(first, first+n)範圍,且使用all_of(), any_of() and none_of() 檢查範圍的屬性的謂詞:
#include//c++11 code
//are all of the elements positive?
all_of(first, first+n, ispositive()); //false
//is there at least one positive element?
any_of(first, first+n, ispositive());//true
// are none of the elements positive?
none_of(first, first+n, ispositive()); //false
一種新型copy_n演算法也可用了,使用copy_n()函式,複製乙個包含5個元素的陣列到另乙個陣列的**如下:
#include
int source[5]=;
int target[5];
//copy 5 elements from source to target
copy_n(source,5,target);
演算法iota()建立了乙個值順序遞增的範圍,好像分配乙個初始值給*first,然後使用字首++使值遞增,在下面的**中,iota()分配連續值給陣列arr,並將分配給char陣列c。
includeint a[5]=;
char c[3]=;
iota(a, a+5, 10); //changes a to
iota(c, c+3, 'a'); //
C 11中的auto陷阱
c 11中引入的auto關鍵字自動推導型別特性,可能是最方便也最容易理解的特性了。然而,即使是這個簡單特性,也有陷阱,需要我們使用時注意。1 引用型別被推導為非引用型別 例如 foo void arg 上面的 中big會被推導為mybigclass型別,而不是mybigclass 型別,從而導致拷貝...
c 11中的tuple(元組)
這次要講的內容是 c 11中的tuple 元組 tuple看似簡單,其實它是簡約而不簡單,可以說它是c 11中乙個既簡單又複雜的東東,關於它簡單的一面是它很容易使用,複雜的一面是它內部隱藏了太多細節,要揭開它神秘的面紗時又比較困難。tuple是乙個固定大小的不同型別值的集合,是泛化的std pair...
C 11 中的 lambda 函式
lambda 演算是個非常古老的計算機語言領域的技術,這段歷史一直可以追溯到20世紀30年代。程式語言最先引入 lambda 函式的是 lisp 語言。之後 lisp 的各種變種中都保留了 lambda 函式的概念。這裡不準備就 lambda 函式的歷史展開介紹。主要是說說 c 11 標準中的 la...