C++缺省参数函数简介和使用
来源:互联网 发布:eclipse for python 编辑:程序博客网 时间:2024/06/05 10:59
所谓缺省参数,顾名思义,就是在声明函数的某个参数的时候为之指定一个默认值,在调用该函数的时候如果采用该默认值,你就无须指定该参数。缺省参数使用主要规则:调用时你只能从最后一个参数开始进行省略,换句话说,如果你要省略一个参数,你必须省略它后面所有的参数,即:带缺省值的参数必须放在参数表的最后面。 缺省值必须是常量。显然,这限制了缺省参数的数据类型,例如动态数组和界面类型的缺省参数值只能是 nil;至于记录类型,则根本不能用作缺省参数。 缺省参数必须通过值参或常参传递。
1. 如果函数已经带有缺省参数的函数原型声明,则在该函数的定义中不允许出现缺省值。
2. 一旦为函数的某个参数指定了缺省值,则必须为后续参数也定义缺省值,从右到左定义缺省参数。
void showmessage(char *text,int length=1,int color ) ; //错color也应定义缺省值。
3. 调用函数时,如果略去一个参数传递,则略去后续所有参数传递,调用时将参数从左至右,逐一传递给行参。
showmessage("hello");
showmessage("hello",5);
showmessage("hello",5,8);
showmessage("hello", ,8); // 错误
缺省参数的误区
使用缺省参数时应该注意避开下列几种误区。
1.滥用缺省参数,损害代码的结构和可读性。
void f(bool b=false)
{
if (b)
{
file://code of open file
}
else
{
file://code of close file
}
}
打开文件和关闭文件在实现代码上没有什么共同点,把两个属于同一类别的函数误认为是实现机制相同,凭空捏造一个参数硬把它们凑在一块,没有什么好处!相反,谁能记得住f(true)代表打开,f()代表关闭呢?况且,f(false)、f()都可以关闭文件,如果调用者混合使用它们就会增加维护上的困难。这种情况下,写成两个独立的函数,非常清晰。
void Open()
{
file://code of open file
}
void Close()
{
file://code of close file
}
推而广之,如下的做法也值得商榷。
class CString
{
private:
char * pcData;
public:
CString(char * pc=NULL);
};
CString::CString(char * pc)
{