注册 登录
编程论坛 C++教室

怎么理解【最佳可行函数】应该满足的条件?

laigaoat2005 发布于 2010-06-03 22:58, 715 次点击
9.4.3 最佳可行函数
最佳可行函数是具有与实参类型匹配最好的参数的可行函数,对于每个可行函数来说,每个实参的类型转换都被划分了等级,以决定每个实参与其相应参数的匹配程度。(9.2 节描述了得到支持的类型转换)最佳可行函数是满足下列条件的可行函数:
1 用在  实参上的转换不比调用其他可行函数所需的转换更差。
2 在某些实参上的转换要比其他可行函数对该参数的转换更好。

以上引用于 C++ primer 3rd 中文版 潘爱民 张丽 译
书上原文。我怎么也不理解,第一点和第二点说的不就是一个意思吗?第一个说,不比调用其它可行函数进行的转换差,第二个说要比调用其它可行函数进行的转换好。只不过第二点特别说明了“某些实参”。我真想不明白为什么要把这两个条件分开说。请大虾们给点方向。小弟在此先行谢过了。
6 回复
#2
迷失的木桶2010-06-04 16:01
搞得这么复杂,我想其实弄明白隐式转换的原理,那么最佳可行函数就顺其自然了,
#3
ltyjyufo2010-06-04 19:38
  最佳可行函数??这个没有标准答案吧,如果是自己用的话,根据问题的实际需要来确定他的参数(具体问题具体分析嘛)。如果是要做成一个成型的函数让大家一起来使用的话,那就应该充分的考虑了》》》》》》个人观点
                                                
#4
迷失的木桶2010-06-04 23:41
楼主说的【最佳可行函数】我还第一次听到,以前都只知道最佳匹配函数,这是在函数重载中发生。

struct sint {
sint(int i); // 构造时隐式转换,支持 sint si = 100;

operator int (void); // 声明隐式转换操作,支持 int i = si;
}

void fun(int i);
void fun(sint si);

void main(void
{
    fun(100); // ??  匹配哪个?
}

楼主思考一下吧
#5
Isilendil2010-06-05 00:24
看看第四版吧

(1) 其每个实参的匹配都不劣于其他可行函数需要的匹配。
(2) 至少有一个实参的匹配优于其他可行函数提供的匹配。

至少有一个匹配优于其他的同时,不能有任何一个匹配劣于其他
#6
laigaoat20052010-06-09 17:58
以下是引用迷失的木桶在2010-6-4 23:41:13的发言:

楼主说的【最佳可行函数】我还第一次听到,以前都只知道最佳匹配函数,这是在函数重载中发生。

struct sint {
sint(int i); // 构造时隐式转换,支持 sint si = 100;

operator int (void); // 声明隐式转换操作,支持 int i = si;
}

void fun(int i);
void fun(sint si);

void main(void
{
    fun(100); // ??  匹配哪个?
}

楼主思考一下吧
谢谢你设计的问题。我想,我明白了你的意思。
在c++ primer 3rd中说到一句话, 最佳可行函数 又叫 最佳匹配函数,    我不知道哪个名字被用得多一点,呵呵。
我猜,fun(100);应该匹配 void fun(int i);吧,因为转换等级中“不转换比转换好”。


to all
谢谢大家的帮助。我知道,大家都为我花费了精力和时间,分给得不均,我深感抱歉,但因为 “第四版” 让我能理解那两句话,只好这样了。再一次谢谢大家。

个为感觉3版的翻译有点不好(可能是我的理解能力的问题),同时笔误也比较多,因为笔误 让我们初学者学习中感觉迷惑的地方 真让人烦心。。。。
#7
yi198606992010-06-09 22:03
菜鸟的我 长见识了
1