C++缺省参数函数简介和使用
2017-06-07 10:23
841 查看
所谓缺省参数,顾名思义,就是在声明函数的某个参数的时候为之指定一个默认值,在调用该函数的时候如果采用该默认值,你就无须指定该参数。缺省参数使用主要规则:调用时你只能从最后一个参数开始进行省略,换句话说,如果你要省略一个参数,你必须省略它后面所有的参数,即:带缺省值的参数必须放在参数表的最后面。
缺省值必须是常量。显然,这限制了缺省参数的数据类型,例如动态数组和界面类型的缺省参数值只能是
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)
{
缺省值必须是常量。显然,这限制了缺省参数的数据类型,例如动态数组和界面类型的缺省参数值只能是
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)
{
相关文章推荐
- c++动态绑定与静态绑定中的函数调用与函数缺省参数
- Thinking in C++ -- 函数的缺省参数
- C++ 编码军规(001):不要使用包含可变参数列表的函数
- [zz]c++可变参数函数使用
- 不可或缺 Windows Native (16) - C++: 函数重载, 缺省参数, 内联函数, 函数模板
- [2012_C++] 函数使用数组参数
- C++中使用引用作为函数参数的优点
- c++ 函数缺省参数
- c++中的命名空间、函数重载、缺省参数
- c++中参数不定函数和va_list的使用
- 【C++】函数缺省参数的作用
- c/c++使用指针做函数返回值和指针作函数参数问题
- c/c++使用指针做函数返回值和指针作函数参数问题
- [C++]实验四:掌握内联函数的使用、参数个数不确定的函数的设计...
- C++关于类成员函数在参数列表后加const的作用,以及使用条件
- [c/c++]函数参数缺省值
- 举例剖析C++中引用的本质及引用作函数参数的使用
- 函数的缺省参数和函数初始化示例以及布尔型参数的使用示例
- C++中begin()函数的含参数的使用
- c++ 函数缺省参数测试示例