1. 程式人生 > >侯捷 C++標準11-14

侯捷 C++標準11-14

本篇記錄學習《侯捷 C++標準11-14》

---------------------------------------------------------------------------------------------------------------------------

下面是語言的部分

---------------------------------------------------------------------------------------------------------------------------

一、演進、環境與資源

(1)、C++ 2.0的新特性,包括語言的部分和標準庫的部分。TR1是2003年的版本,即c++1.0。

(2)本文要點:

二、Variadic Templates

(1)數量不定的模板引數,引數個數和引數型別都未定。

三、Spaces in Template Expression、nullptr and std--nullptr_t、Automatic Type Deduction with auto

(1)vector<list<int> > C++11之後可以識別spaces

(2)C++11中,nullptr可以代 替 0 和 NULL。 0 ——》int型;而nullptr——》void*指標型。而NULL即是0,又是void*,所以有歧義。

(3)auto型 ——》如果型別很長時,不必指明變數型別,編譯器會進行型別推倒

四、Unifrom Initialization

(1)初始化變數和物件的方法。Unifrom Initialization即使用{ },不過小括號()保留有效。

(2)編譯器一看到{ },即呼叫initializer_list<T> ——》它又呼叫array<T, n>。

五——六、 Initializer_list

(1)initializer_list<T>作引數。

(2)容器 array

七、Explicit for ctors taking more than one argument——》(C++2.0中的)

(1)關鍵字 Explicit ,不能靠 編譯器來推倒,而是明確的 呼叫的是哪一個具體的建構函式ctors,才會去呼叫那一個。

八、Range-based for statement

(1)for迴圈的使用:

九、=default,   =delete

(1)強制加上關鍵字=default ,預設的建構函式 會被呼叫。

十、Alias Template 別名模板

(1) 關鍵字using

十一、Template template parameter

(1)模板作為引數

十二、 Type Alias, noexcept, override, final

(1) Type Alias 型別化名,類似於 typedefine,也是使用關鍵字 using

(2)noexcept ,例子:void foo() noexcept ——》保證函式foo()不丟出異常。

(3)overwrite

virtual void cfunc(int) overwrite { } //overwrite用於告訴編譯器,當重新定義虛函數出錯時要報錯

(4)final,修飾類和虛擬函式,表示 類不可以被繼承,虛擬函式不可以被複寫。

十三、decltype 關鍵字

(1)decltype (xxx),用於獲得物件xxx的型別。

十四、lambdas

(1)lambdas允許定義inline函式。加個小括號(),就可以呼叫。

十五——二十一、Variadic Templates 

(1)... 出現在三個地方:

(2)Variadic Templates重寫printf函式

(3)使用的是class template:類繼承本類,形成遞迴:

(4)除了上面的繼承遞迴,還有複合遞迴。

---------------------------------------------------------------------------------------------------------------------------

下面是標準庫的部分

---------------------------------------------------------------------------------------------------------------------------

二十二、標準庫原始碼分佈

(1)V C++的庫的分佈,GNU C++的庫的分佈

二十三、 Rvalue references and Move Semantics

(1)Rvalue references 右值引用.右值不可以放在左邊;臨時物件就是一個右值。 &&a

(2)Move Semantics

二十四、Perfect Forwarding

(1)unperfect  Forwarding不完美的轉交

二十五、寫一個 Move-aware class

(1)

二十六、 Move-aware class 對容器的效能測試

(1)

二十七、 容器—結構與分類_舊與新的比較 — 關於實現手法

(1)

二十八、容器 array

(1)

二十九、 容器 Hashtable

(1)

三十、 Hash function

(1)

三十一、 Tuple

(1)遞迴呼叫