对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之前,然后看到它仍然是去重新實例話一個函數,而不是使用特化的函數,這是因為compare的函數參數是引用類型,而我們調用compare時是這樣的,compare("hello","world"),那么當參數是引用時,常量字符串就不會主動轉變成const char*指針,如果我們把compare的參數改為非引用類型的,那么compare("hello","world")就會調用特化版本,反之,"hello"和"world"調用范型函數時確定的類型是 const char *(&)[6],和下面的是同理
void print(const char* &p)
{
}
?
void print(const char* p)
{
}
假如上面2個函數都是合理的,當print("aaaa")時會調用哪個函數?從上面我們能得出,應該調用函數形參是非const的,因為這時是傳值;如果只有第1個函數而我們print("aaa"),那么就會因為找不到對應的print函數而編譯不通過
轉載于:https://www.cnblogs.com/buxianghe/archive/2013/04/17/3026680.html
總結
以上是生活随笔為你收集整理的对c++primer 16.6.1的第4小节的代码说明的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 摩尔庄园含羞草怎么获得
- 下一篇: 两种方法将Android NDK sam