据我所知,当在两个候选函数之间进行选择时,编译器将更喜欢其最弱匹配更强的那个。
例如,如果我有:

void boo(int i, char c);
void boo(double d, int i);

对于以下代码:
float f = 1.0;
char c = 'c';
boo(f,c);

第二个boo应该是首选,因为它的最弱匹配是提升,而第一个是标准类型转换。

但是,当我尝试使用gcc对其进行编译时,我得到:



有任何想法吗?

最佳答案

您对重载解决方案的理解是错误的。一般
规则(当有多个参数时)是选择
至少有一个参数更好的函数(它没有
不管有多好),而其他任何一个都不会更糟。在
换句话说,编译器会分别处理每个参数,
为此创建一组“最佳匹配”。之后,需要
这些集合的并集:如果交集恰好包含一个
功能,您赢了。否则,这是模棱两可的。

关于c++ - 重载分辨率,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18152207/

10-12 23:51