《c++ primer 4.0》中的習題16.23要求嘗試能否給標準函式max傳遞int和double型別的引數,下面是我的實測以及乙個小發現(環境:vs2010, win7 32位),
嘗試一:
int i = 1;
double dn = 2.2;
cout << max(dn,i) << endl;
編譯器會提示第三行錯誤,因為沒有與max模板匹配的形參。
而進行如下修改之後,編譯器可以成功編譯,
嘗試二:
int i = 1;
double dn = 2.2;
cout << max(dn,i) << endl;
執行結果是2.2。個人認為這是因為在嘗試二中max為max模板指定了顯示型別形參,在這種情況下編譯器允許將int型別的i隱式轉化為double型別,從而成功編譯及執行。
下面再來驗證一把:
int i = 1;
char a = 'a';
cout << max(a,i) << endl;
結果是97。 bingo~~
好吧。。。下面一題就講這個了。。悲催。。。
C 非型別引數的模版實參
今天看見c 中關於類模版的定義有兩種,首先,類模版的定義和宣告都以關鍵字template開頭,後面接上以逗號分隔的模版參數列 template parameter list 模版參數列以 括起來,模版引數一種是型別引數 type parameter 另一種是非型別引數 nontype paramet...
談談c 中的模版
c 中的模版給我的印象有以下幾個 1,函式模版和普通函式相比多了乙個宣告它是模板的模板頭,它在宣告和定義時不指定形參的型別,到被呼叫時才根據傳遞進來的實參型別確定形參型別。這樣就滿足了定義乙個函式可以進行多種資料型別的運算效果。函式模版和普通模版的用法是一樣的,它可以被呼叫,可以被過載等。2,類模版...
C 中template(模版)的使用
我們在程式設計的時候總是會遇到一些類似的模組,只是模組中的形參的資料型別不同,導致我們要不斷的去更改模組的。這裡就涉及到過載的知識點了。例如以下的幾種情況 函式1.int max int x,int y 函式2.float max float x,float y 函式3.double max dou...