天天看點

深入了解C++11:C++11新特性解析與應用

1、C++98中僅模闆類支援預設參數,模闆函數不支援預設參數,但C++11中模闆類和模闆函數均支援預設參數

2、模闆類的預設參數,對C++98和C++11中,需遵循“從右往左”的規則指定。

3、模闆函數的預設參數,則沒有該限制

在子類中使用該文法聲明繼承父類的哪些方法,而不必再寫一遍溝通函數

using 父類::函數名;

為了區分被調用者和調用者,稱為初始化清單中調用“基準版本”的構造函數為委派構造函數(delegating constructor),而被調用的“基準版本”則為目标構造函數(target constructor)。在C++11中,所謂委派構造,就是指委派函數将構造的任務委派給了目标構造函數來完成這樣一種類構造的方式。

個人總結:

1、類中的構造函數可以繼承其它構造函數,并做擴充。看上去類似調用父類的構造函數。

2、抽象出最為“通用”的行為做目标構造函數。

C++11将POD劃分為兩個基本概念的合集,即:平凡的(trivial)和标準布局的(standard layout)

a、平凡的類或結構體符合以下定義:

1)擁有平凡的預設構造函數(trivial constructor)和析構函數(trivial destructor)

2)擁有平凡的拷貝構造函數(trivial copy constructor)和移動構造函數(trivial move constructor)

3)擁有平凡的靠背指派運算符(trivial assignment operator)和移動指派運算符(trivial move operator)

4)不能包含虛函數以及虛基類

//使用該輔助的類模闆判斷

template struct std::is_trivial;

b、标準布局

1)所有非靜态成員有相同的通路權限(public,private,protected)

2)在類或者結構體繼承時,滿足以下兩種情況之一

a、派生類中有非靜态成員,且隻有一個僅包含靜态成員的基類。

b、基類有非靜态成員,而派生類沒有非靜态成員。

3)類中第一個非靜态成員的類型與其基類不同。

4)沒有虛函數和虛基類。

5)所有非靜态資料成員均符合标準布局類型,其基類也符合标準布局。這是一個遞歸的定義。

枚舉值

定義規則

memory_order_relaxed

不對執行順序做任何保證

memory_order_acquire

本線程中,所有後續的讀操作必須在本條原子操作完成後執行

memory_order_release

本線程中,所有之前的寫操作完成後才能執行本條原子操作

memory_order_acq_rel

同時包含memory_order_acquire和memory_order_release标記

memory_order_consume

本線程中,所有後續的有關本原子類型的操作,必須在本條原子操作完成之後執行

memory_order_seq_cst

全部存取都按順序執行

繼續閱讀