| 标签: 杂谈 | 
答案是可以的,下面结合一个程序来说:
#include <iostream>
using namespace std;
int max(int a, int b)
{
return (a > b ? a : b);
}
int max(int a, int b, int c = 0)
{
return ((a > b ? a : b) > c ? (a > b ? a : b) : c);
}
int main ()
{
int a = 4, b = 5, c = 3;
cout<<max(a, b)<<endl;
return 0;
}
该程序在编译时是错误的,原因在于cout<<max(a, b)<<endl;语句在调用max(a, b)是会产生歧义,如果我们改做cout<<max(a, b, c)<<endl;那就没有问题了。
由此可以看出:重载函数中使用默认参数没有问题,关键在于如何调用。
事实上,涉及重载函数的调用一般都要注意此问题,例如有如下重载函数:
void f(int);
void f(long);
在执行f(0),f(65),f(12345)等函数调用时只会会调用f(int),而在执行f(12345678901)时会产生编译错误。
							
		#include <iostream>
using namespace std;
int max(int a, int b)
{
return (a > b ? a : b);
}
int max(int a, int b, int c = 0)
{
return ((a > b ? a : b) > c ? (a > b ? a : b) : c);
}
int main ()
{
int a = 4, b = 5, c = 3;
cout<<max(a, b)<<endl;
return 0;
}
该程序在编译时是错误的,原因在于cout<<max(a, b)<<endl;语句在调用max(a, b)是会产生歧义,如果我们改做cout<<max(a, b, c)<<endl;那就没有问题了。
由此可以看出:重载函数中使用默认参数没有问题,关键在于如何调用。
事实上,涉及重载函数的调用一般都要注意此问题,例如有如下重载函数:
void f(int);
void f(long);
在执行f(0),f(65),f(12345)等函数调用时只会会调用f(int),而在执行f(12345678901)时会产生编译错误。

 加载中…
加载中…