加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

【转】重载函数允许使用默认参数吗?

(2010-11-27 14:33:00)
标签:

杂谈

答案是可以的,下面结合一个程序来说:
#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)时会产生编译错误。

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有