对c++primer 16.6.1的第4小节的代码说明
這段代碼是這樣的:
template<typename T>
int compare(const T& t1,const T& t2)
{
cout<<"范型"<<endl;
return 1;
}
int main()
{
cout<<compare("hello","world")<<endl;
}
template<>
int compare<const char*>(const char* const &t1,const char* const &t2)
{
cout<<"特化"<<endl;
return 2;
}
我們可以把compare對const char*的特化版本放在main之前,然后看到它仍然是去重新實例話一個函數(shù),而不是使用特化的函數(shù),這是因為compare的函數(shù)參數(shù)是引用類型,而我們調(diào)用compare時是這樣的,compare("hello","world"),那么當(dāng)參數(shù)是引用時,常量字符串就不會主動轉(zhuǎn)變成const char*指針,如果我們把compare的參數(shù)改為非引用類型的,那么compare("hello","world")就會調(diào)用特化版本,反之,"hello"和"world"調(diào)用范型函數(shù)時確定的類型是 const char *(&)[6],和下面的是同理
void print(const char* &p)
{
}
?
void print(const char* p)
{
}
假如上面2個函數(shù)都是合理的,當(dāng)print("aaaa")時會調(diào)用哪個函數(shù)?從上面我們能得出,應(yīng)該調(diào)用函數(shù)形參是非const的,因為這時是傳值;如果只有第1個函數(shù)而我們print("aaa"),那么就會因為找不到對應(yīng)的print函數(shù)而編譯不通過
轉(zhuǎn)載于:https://www.cnblogs.com/buxianghe/archive/2013/04/17/3026680.html
總結(jié)
以上是生活随笔為你收集整理的对c++primer 16.6.1的第4小节的代码说明的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 摩尔庄园含羞草怎么获得
- 下一篇: dnf现在黑暗武士怎么样?刷图和pk都讲