注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

还东国的博客

行之苟有恒,久久自芬芳

 
 
 

日志

 
 

C++小知识67——对于函数默认参数的注意点  

2015-11-12 21:43:50|  分类: C++(VC)编程 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
C++小知识67——对于函数默认参数的注意点

在写一个库的接口的时候儿,要对一些参数设置默认值:
bool SetData(int flag = 0);
其实现:
bool A::SetData(int flag = 0)
{
return true;
}
一开始是没有什么问题,可是后来要求增加一个参数,即改成如下模式:
bool SetData(int flag = 0,float type);
bool A::SetData(int flag = 0,float type)
{
return true;
}
然后就开始报各种错误,“error:default argument given for parameter1”,还有“error:default argument missing for parameter 2 of "XXXXXX"”,然后这事儿就成了一个事儿了,查了下资料

并且想了下,发现是下面两个问题:
一个是默认参数的顺序参数的,必须从左到右,即左面有了默认值后,其右面的必须也有。这和C和C++的压栈顺序有关,即从右向左压栈。
也就是说,第一个错误是默认参数的声明顺序有问题。
二是默认参数在类声明中(.h)有了后,其实现中,如果是只有一个参数,并且其有默认值,则实现(.cpp或者.c),但如果有两个以上,则在实现中就不能再有默认值了。
第二个问题是如果多个参数的情况下,有了默认参数后,实现处就不能再有默认值设置了。

细节啊。
  评论这张
 
阅读(213)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017