C 11新特性 侯捷 課程筆記 二

2021-10-07 22:05:57 字數 1386 閱讀 6619

本部分包括的內容為variadic templates(可變模板引數),這部分似乎是個概述,我看到後面有好幾節課也是這個主題。

void print()

template //這裡的...是關鍵字的一部分

void print(const t& firstarg, const types&... args) //這裡的...要寫在自定義型別types後面

1. 注意三種不同的...的應用環境,這些都是語法規則,所以記住即可。

2. 還要注意的是,在可變模板引數內部可以使用sizeof...(args)得到實參的個數。

3. 如果同時定義了:

template void print(const types&... args)

那麼這兩個定義會優先呼叫哪個?換句話說,哪個定義更加泛化,哪個更加特化?這個侯捷老師說以後會做解釋

(更新:這個更加泛化,所以會呼叫之前定義的更特化的版本)

1. 實現函式的遞迴呼叫

舉了乙個unordered容器中hash函式的計算例子:

class customerhash

};template inline void hash_val(size_t& seed, const t& val, const types&... args)

template inline size_t hash_val(const types&... args)

template inline void hash_val(size_t& seed, const t& val)

本質上和概述裡的例子一樣,都是利用可變模板引數的函式遞迴操作,這裡就不多做解釋了。

2. 實現遞迴繼承

這裡舉了乙個tuple的實現的例子:

template class tuple;

template <> class tuple<> {};

template class tuple: private tuple//注意這裡的私有繼承

tuple(head v, tail... vtail)

:m_head(v), inherited(vtail...) {}

head head()

inherited& tail() //這裡涉及派生類到基類的型別轉換

protected:

head m_head;

};

ppt裡解釋得很清楚:

c 11 新特性 (二)

1.nullptr 專門形容指標為空 2.強類列舉 enum direction enum answer 3靜態斷言,可在編譯時作判斷 static assert size of int 4 4.建構函式的相互呼叫 delegating constructor class a a int x,int...

C 11新特性 二

目錄 default,delete 配合建構函式和拷貝賦值 一起使用 alias template template typedef type alias別名 using noexcept override final decltype lambda 右值引用 對於乙個空的class c 編譯器處理...

C 11新特性學習筆記(二)

c 11引入了lambda 匿名函式 這樣就可以在乙個函式只需呼叫一次的地方使用了,類似內聯函式。c 11 的 lambda 表示式規範如下 capture params mutable exception attribute ret 1 capture params ret 2 capture p...