侯捷 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)遞迴呼叫