12.29--C++模板與泛型程式設計--《C++ Primer》學習
今天學習第16章《模板與泛型程式設計》 感覺腦子有點模模糊糊的,效率不是很高,趕快寫一下學習日誌備忘。
模板其實在java中用的也多了,但是C++的沒用過,感覺有點虛。
其實的確是差不多的用法,所以記幾個點好了。
1. 模板形參表,即template <typename T...> 或 template <class T...>
2. 使用函式模板或類模板時,是編譯器根據不同的實參型別進行例項化的過程。具體機理還沒有看到。
3. inline函式模板: inline寫在形參表之後。
4. 模板形參的作用域:模板形參的作用域即為其後所跟隨的{ }中,個人理解。會遮蔽全域性名字,比如typedef double T
5. 有兩種模板形參:型別形參 與 非型別形參
型別模板形參也就是class或typename T的那種,在函式或類的定義中使用其作為型別。
非型別模板形參類似一般的函式的形參,如int n, float s等等。
6. 型別形參中需要注意的一點:如果要在模板定義的內部使用指定型別,即在型別T中可能存在定義了的型別K,如果要使用型別K,則:
如:
template <class T>
T function(T* arrray)
{
T::size_type * p;
}
也就是說T中可能定義了型別size_type,但是編譯器未必知道,他會預設size_type是一個物件,然後結果就是做乘法操作,所以這裡要顯式的定義,方法是在前面加上typename。 typename T::size_type * p;
7. 至於非型別模板形參
我今晚試了一下,幾乎完全按照書的程式碼,結果卻報錯了。等完成後再補上來吧。
8. 今晚做的測試程式,還有一個發現或者猜測是,int x[10] 這樣定義的陣列跟 用指標來定義的陣列必然是有很大區別的,除了所謂的const的區別之外,還有就是關於10這個陣列長度,會不會暫存器是會有儲存的呢? 只是猜想。
(明日繼續)