c template 5 x 學習總結

2022-03-06 10:16:58 字數 2111 閱讀 7332

1.雙重模版引數,即模版的引數也是模版,不過只能用於類模版,函式模版中不能這麼使用

例如 template >class cont=std::deque>

stack8{}...

這裡注意首先 class cont不能寫typename cont ,這個比較好理解,這是個類模版。

其次給cont設定預設值=std::deque,由於deque的模板引數是2個,儘管第二個有預設值,但是在這裡會忽略,進行嚴格匹配,所以如果預設值給的deque

則template class cont必須有兩個模版引數

2.類模板的成員函式也可以是函式模版 

template>class cont2>

stack8&operator=(stack8const&);

不過這裡的cont2不能有預設值,函式模板的預設值好像是到c++11才支援的。

後面寫的時候也發現了點問題,原來在類外進行函式定義時,不能把模板的預設引數帶上....

比如下面的std::deque必須去掉...

template>class cont=std::deque>

void stack::pop()

不過有點奇怪的是,一般類外定義成員函式,如果函式宣告時有預設引數,類外定義的函式是不能新增預設引數的。

但是放到模板裡就又沒問題了。比如pop(int m=4)編譯也可以過啊?

3. 乙個簡單的templatet const& max(t const&a, t const &b)

如果呼叫

max("123","abc");  ok

max("123","abcd"); complier error

為什麼?

對於第二種 錯誤提示是 t的型別是const char [4] 還是const char [5]?

這裡又解釋了一點,如果引數推導時,形參是引用,陣列作為引數傳入時,不會退化為指標,所以這裡識別的是const char這種陣列型別!!!

改成 t max(t a, t b)就可以了

1 #include2 #include3 #include

4 #include5

6using

namespace

std;

78 template>class cont=std::deque>

9class

stack

1021

22 template>class cont2>

23 stack&operator=(stackconst&);

2425

};26 templateclass cont>

27void stack::push(t1 const&t)

2831

32 template>class cont>

33void stack::pop(int m=4)34

37 template>class cont>

38 t1 stack::top()

3942

43 template>class cont>

44bool stack::empty()const

4548 template>class cont>

49 template>class cont2>

50 stack& stack::operator =(const stack&stack2)

5156

else

5764

return *this;65

}66};67

6869

class

string

7076

void set_m_str(char* buf=null);

77private:78

string

m_str;

79};

8081

void string::set_m_str(char*buf)

8285

void func(string&str)

8689

90 template 91

inline t max (t a, t b)

9295

intmain()

96

C template學習總結6

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

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...

學習總結 5

操作符問題 一.算術操作符 1.除了 操作符之外,其他的幾個操作符可以作用於整數和浮點數。2.操作符的兩個運算元必須是整數。返回的是整數之後的餘數。二.移位操作符 1.左移 移位規則 左邊拋棄,右邊補零。2.右移 分兩種 1 邏輯移位 左邊用補充,右邊丟棄。2 算術移位 左邊用原該值的符號位補充,右...