一些常用的C 11新增特性

2021-08-22 16:17:35 字數 1628 閱讀 7070

c++11新標基於c++程式設計社群的大量實踐經驗,並吸收了很多boost庫的特性,還對原有c++做了一些改進工作,是學習現代c++程式設計c++11支援對於所有的內建型別和使用者定義型別使用大括號方式的初始化列表,使用初始化列表時,可以新增等號,也可以沒有。

int x = ; // 以前只有陣列可以這樣初始化 double y ; int* ar = new int[4] ; classtype s1(構造引數1, 構造引數2); // 傳統方式建立乙個classtype物件 classtype s2; // c++11方式建立乙個classtype物件 classtype s3 = ; // c++11方式建立乙個classtype物件

注意:c++11還提供了乙個用於建構函式的模板類initializer_list,stl容器的建構函式就使用了這個類

傳統意義的左值,指的是出現在賦值語句左邊的表示式。例如:

int a = 20; // 這裡的a就是乙個左值

傳統的c++引用都是使乙個識別符號關聯到乙個左值,所以傳統的c++引用也被稱為左值引用,例如:

int a = 20; int& ra = a; // 即ra是變數a的引用(或別名)

c++11新增了右值表示式,採用&&表示。和左值引用(可以關聯到乙個左值)類似,右值引用可以關聯到乙個右值。具體說:

int a = 10; int b = 20; int c = a + b; // 這裡的a+b就是乙個右值,以前是沒有辦法對a+b設定引用的 int&& r1 = a + b; // 根據c++11,r1可以關聯到a+b產生的那個臨時物件,a、b的值修改了,r1也不變

智慧型指標是支撐raii(獲取資源即初始化)程式設計理念的重要方法。對於c++的raii,簡單的講,就是所有在堆上分配的資源都委託乙個棧物件管理。通過棧物件的自動釋放,實現對上資源的自動釋放,有效防止記憶體洩露。 

c++11中的智慧型指標包括三種:std::unique_ptrstd::shared_ptrstd::weak_ptr。 

這三種智慧型指標都是模板類,每個例項化的智慧型指標物件都是乙個用於管理裸指標棧物件。所以,智慧型指標物件一般都是直接定義在函式的棧上(不會使用new運算子建立),智慧型指標物件的內部實現一定是管理乙個原始指標,且這個原始指標最終要指向堆上分配的資源。 

因為智慧型指標過載指標運算子(-> 和 *)以返回封裝的原始指標,所以,程式設計師可以像使用普通指標一樣使用智慧型指標。 

std::unique_ptr智慧型指標的建立和使用:

如果理解函式指標、函式物件、(具名)lambda函式。我們會突然發現,c++中有多種類似函式的呼叫形式,這些呼叫形式的存在對於普通程式原來講其實無所謂,夠用就行。但是對於模板化程式設計來說,太多的呼叫形式會導致使用了這些呼叫形式的模板被例項化多次。所以,c++11提出了將多種函式呼叫形式統一的包裝器std::function。

所以,簡單的說,std::function是對c++中各種可呼叫實體(普通函式、lambda表示式、函式指標、以及其它函式物件等)的乙個統一封裝,形成乙個新的統一可呼叫物件(std::function物件)(主要是對模板化程式設計很有意義)。

C 11中的一些新特性

c 11擴大了初始化列表的使用範圍,所有的內建型別和使用者自定義型別都可以使用列表初始化,號可新增可不新增。如 int main int arr2 int arr3 newint 5 vector int v1 vector int v2 return0 容器支援花括號列表初始化,本質上是增加了乙個...

c 11常用特性

目錄 一 atomic 1 std atomic flag 2 std atomic 二 std thread 三 std condition variable 四 右值引用 五 std function std bind 六 lambda表示式 atomic flag 一種簡單的原子布林型別,只支...

C 11的一些功能

1.斷言是將乙個須要為真的表示式放在語句中,在debug 模式下檢查一些邏輯錯誤的引數。c 中使用assert 須要使用 或者標頭檔案。有函式定義例如以下 void fun int a,int n 這樣就能夠檢查n 0 的情況。假設遇到這樣的情況,程式會呼叫abort 函式而終止。c 11 提供了s...