C 11中值得關注的幾大變化

2021-06-02 14:31:27 字數 1770 閱讀 1473

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...