随笔-34  评论-108  文章-0  trackbacks-0

    要从一组重载函数中找到应实际调用的那个正确版本,就需要找到实参和形参的最好匹配。一般遵循下面一些列的判断准则:
(1)准确匹配。也就是说无须任何转换或者只进行平凡转换的匹配。(平凡转换:从数组名到指针,从函数名到函数指针,从T到const T之类的)
(2)利用提升的匹配。比如整数提升(从bool到int,从char到int,shot到int之类)或者从float到double的提升。
(3)利用标准转换的匹配。例如:int到double,double到int,double到long double,derived*到base*,T*到void*之类。
(4)利用用户定义的转换的匹配。
(5)利用在函数声明中用到的...的匹配。
    如果能在找到匹配的某个最高的层次上同时发现了两个匹配,这个调用将被作为歧义而被拒绝。

posted on 2007-01-24 11:47 探丫头 阅读(1064) 评论(1)  编辑 收藏 引用 所属分类: 编程语言——C++

评论:
# re: 重载函数的参数匹配[未登录] 2007-02-11 17:04 | BBSky
提醒一下(1)中所提到的应该是decay转换,不是平凡转换,decay表示一种类型信息的退化,比如一个数组int a[3];的类型不仅包含了元素类型int同时还包含了数组的长度3,而在decay转换后就失去了长度信息;
第二点(4)中所提到的用户定义的转换,包括没有explicit关键字修饰的单参数构造函数和类似于operator T()的类型转换操作符,同时更重要的是用于定义的转换仅仅能够被使用一次。  回复  更多评论
  

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理