C template學習總結6

2021-09-06 05:06:40 字數 1206 閱讀 5237

對於基本型別來說,並沒有乙個default模式來講他們初始化為有意義的值,沒有初始化的變數,其指都是未定義的,但是在模板這一塊呢?我們可以採用下面的形式:

template void foo() 

對於class template我們可以採用下面例子的方式:

template class myclass  

… };

通過引用形式將字串字面常數傳遞給模板,有時候會遇到錯誤:

#include // note: reference parameters 

template inline t const& max (t const& a, t const& b)

int main()

是char const[6],」tomato「是char const[7].

但是如果你使用傳值形式的話,那麼久是可以的。

#include // note: nonreference parameters 

template inline t max (t a, t b)

int main()

這種方式之所以可以,是因為在引數的推倒過程中,只有當引數不是乙個引用的時候,【array轉換為pointer】的動作才會發生,這個規則我們用下面的例子來說明:

#include #include template void ref (t const& x) 

template void nonref (t x)

int main()

結果為:

其實在這個例子中,最好的方式是對string進行過載,這麼做尤其必要的,如果不這麼做的弧啊,對於兩個字串字面常熟呼叫max()是合法的,但是max()會以operator《比較兩個指標的大小,所比較的其實是兩個指標的位址,而不是其字面值,這也就是為什麼使用std::string比c-style字串要好的原因之一。

只有當你以by value的方式使用字串字面常熟的時候,字串底部的array才會被轉型(退化)為乙個字元指標。也就是array to pointer。

c template學習總結3

和往常一樣,先來看一段 include template class stack bool full const constructor template stack stack numelems 0 start with no elements template void stack push t...

c template 5 x 學習總結

1.雙重模版引數,即模版的引數也是模版,不過只能用於類模版,函式模版中不能這麼使用 例如 template class cont std deque stack8 這裡注意首先 class cont不能寫typename cont 這個比較好理解,這是個類模版。其次給cont設定預設值 std de...

C template 學習歸納2

關於c 中的類模板,常見的形式為 templateclass classname 比如筆者在這裡舉乙個例子 include include include templateclass stack templatevoid stack push t const a templatevoid stack...