re: 總結一下C++的名稱查找順序 大熊貓 2007-01-05 13:31
@Francis Arcanum
有點明白了,如果出現像上述小程序中的4函數,因該一開始編譯器就決定用它。如果沒有的話,再在二個模板函數中進行判斷,決定使用哪一個。然后發現是個模板函數,要實例化了,看見一個很匹配的特化版本,就直接用它了,對嗎? 上課要遲到了,哈哈,謝謝兄弟~。
re: 總結一下C++的名稱查找順序 大熊貓 2007-01-05 13:16
void f(T) {} // [1]
template < typename T >
void f(T * ) {} // [2]
template <>
void f < int *> ( int * ) {} // [3]
void f(int *)
{
cout<<"111"; //[4]
}
int _tmain(int argc, _TCHAR* argv[])
{
int * p = 0 ;
f(p);
int pause;
cin>>pause;
return 0;
}
我又加了一個函數,我想問一下,在這個小程序里,編譯到底有沒有對二個模板函數做重決呢?難道編譯器先對二個模板函數進行重載的決議,然后決定哪個模板更好一些,然后再在實例化的時候,在比較匹配的模板所有可能的實例化版本和它的特化版本,還有函數4,中選擇一個最佳。不好意思,不知道有沒有表達清楚我的意思。
re: 總結一下C++的名稱查找順序 大熊貓 2007-01-05 13:02
謝謝您
我還是弄大不懂
你的意思說編譯器看到y.g<int>(),查找到那個模板函數以后就不繼續找了,因為它是私有的,就直接報錯了(盡管還有一個公有的特化版本)。那如果不是私有的,那么它就準備實例化,當實例化的時候它還會去查符號?然后發現一個特化的版本,然后又調用了特化版本的?
re: 總結一下C++的名稱查找順序 大熊貓 2007-01-04 19:26
是不是在沒有重載的情況下,編譯器找到一個符合內容的就會符號就會地址搜索,所以例5中的那個特化沒有被考慮呢?
re: 總結一下C++的名稱查找順序 大熊貓 2007-01-03 16:19
對特化不大了解,不知道特化用在什么地方,看起來只要有模板函數,編譯器就無視特化函數,能舉個編譯器不無視特化函數的例子嗎?