函数重载遇上函数默认值会发生什么?----二义性

来源:互联网 发布:淘宝达人资历说明案例 编辑:程序博客网 时间:2024/06/01 03:58
#include <iostream>using namespace std;int func(int a,int b,int c = 0){    return a*b*c;}int func(int a,int b){    return a+b;}int main(){    cout << "func(1,2): " << func(1,2) << endl;    return 0;}

报错:两个函数都可以执行,但不知道调用哪一个,编译不通过!

总结:在做产品时,如果使用“默认参数”就不要使用“函数重载”。二选一,不要同时使用,防止二义性。

编译器调用重载函数的准则:
1.将所有同名函数作为候选者;
2.尝试寻找可行的候选者;
(1)精确匹配实参类型
(2)通过默认参数能够匹配实参类型
(3)通过默认类型转换匹配实参
匹配失败:
(1)最终寻找可行的候选函数不唯一,出现二义性,编译失败;
(2)无法匹配所有候选者,函数未定义,编译失败。

0 0
原创粉丝点击