VC++ C++ C# Algorithm

C++博客 首页 新随笔 联系 聚合 管理
  21 Posts :: 3 Stories :: 31 Comments :: 0 Trackbacks
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
对特化不大了解,不知道特化用在什么地方,看起来只要有模板函数,编译器就无视特化函数,能举个编译器不无视特化函数的例子吗?