一级棒(Eachfun)
RSS订阅
默认实参
发表时间:2006-08-03 09:34:04 关键词:C++,MFC,VC,Primer,编程,教程,读书

  没什么比偷懒更舒服的了,所以我喜欢允许默认实参的函数,我还喜欢写允许默认实参的函数。
  在形参表中,如果允许某些形参具有默认值,则它们必须按从右到左的方向排列。以上这个规定C++与BASIC是一样的,但是C++与BASIC还有一点区别,就是在函数调用时,C++必须从右边开始缺省实参,而BASIC却可以任意缺省而不顾次序(只要有逗号表示那里缺了个东西即可)。所以,同样设计函数,C++比BASIC要多考虑一个问题:“设计带有默认实参的函数,其中部分工作就是排列形参,使最少使用默认实参的表参排在最前,最可能使用默认实参的形参排在最后。”
  形参的默认值竟究写在声明中还是实体中?我曾经试过,在某些情况下写在声明中或实体中一样可行。但是,事实上写在实体中是错误的做法。只有当函数实体和函数调用在同一个源文件中,而且函数实体在调用前被编译时,将形参的默认值写在实体中才可通过编译。实际上对于这种情况,函数根本就不用声明。
  将默认值写在实体中不仅仅是能否通过编译的问题,还关系到程序设计的理念。“一是函数的实现本来就与参数是否有缺省值无关,所以,没有必要让缺省值出现在函数的定义体中。二是参数的缺省值可能会改动,显然修改函数的声明比修改函数的定义要方便。”(《高质量C++/C编译指南》第63页)
  读到这里,本书给了我一个大大的惊诧:原来默认实参的默认值还可以是任何表达式。以前,我一直是这样写的:“int GetInt(int i=3);”虽然没人跟我这样说过,但是我始终以为后面的默认值只能是常量。想不到还可以是需要求值的变量甚至是更复杂的表达式:
int GetInt(const int i = 3);
int GetInt2(const int j = GetInt());//居然可以这样写
  学习了,感谢《C++ Primer》!

本站特约顾问律师常州东晟律师事务所朱立律师(电话13915029670,QQ646146109)提醒您:
本站文章皆为作者原创,其它媒体(包括但不限于报刊、杂志、网站、电视、电台)未经作者书面许可严禁转载(或部分摘录)!
相关评论
  • 谢谢,有机会多向你请教
    person点点 link未填 QQ87588001 email未填 时间:2008-05-17 19:54:23
  • 好几天没来看你了,你又有进步了。
    person我不是猫 linkhttp://cai917.blog.sohu.com/ QQ未填 email未填 时间:2006-08-04 18:44:20
  • 居然可以这样写.我也不知道.呵呵.
    personwalkman link未填 QQ未填 email未填 时间:2006-08-03 15:04:20
1
发表评论
称呼:
QQ:
邮箱:
链接:
内容:
搜索: 百度搜索 Google搜索
Copyright©2000 - 2008 Eachfun.Com, All Rights Reserved 一级棒网络
苏ICP备05080156号
一级棒建站系统 http://www.eachfun.com 一级棒版权所有,未经许可不得商用!