C++默认参数
来源:互联网 发布:陈冠希道歉 知乎 编辑:程序博客网 时间:2024/06/17 15:05
函数的默认参数值,即在定义参数的时候同时给它一个初始值。在调用函数的时候,我们可以省略含有默认值的参数。也就是说,如果用户指定了参数值,则使用用户指定的值,否则使用默认参数的值。
void Func(int i = 1, float f = 2.0f, double d = 3.0){ cout << i << ", " << f << ", " << d << endl ;}int main(void){ Func() ; // 1, 2, 3 Func(10) ; // 10, 2, 3 Func(10, 20.0f) ; // 10, 20, 3 Func(10, 20.0f, 30.0) ; // 10, 20, 30return 0 ;}
参数的值也可以是表达式,这样,表达式将在函数被调用的时候求值,比如下面的func函数,第二个参数值是通过函数调用得到的,每次调用func函数时,该函数都会调用getValue来获取b的值。
class Test{public: static int getValue() { return 1; } int func(int a, int b = getValue()) { return b; }} ;
如果某个参数是默认参数,那么它后面的参数必须都是默认参数
下面两种情况都可以
void Func(int i, float f = 2.0f, double d = 3.0) ;void Func(int i, float f, double d = 3.0) ;
但是这样就不可以
void Func(int i, float f = 2.0f, double d) ;
默认参数的连续性能保证编译器正确的匹配参数。所以可以下这样一个结论,如果一个函数含有默认参数,那么它的最后一个参数一定是默认参数。
默认参数可以放在函数声明或者定义中,但只能放在二者之一
通常我们都将默认参数放在函数声明中,因为如果放在函数定义中,那么将只能在函数定义所在地文件中调用该函数。(为什么呢?)
.h文件
class TestClass{public: void Func(int i, float f, double d) ;};
.cpp文件
#include "TestClass.h"void TestClass::Func(int i = 1, float f = 2.0f, double d = 3.0){ cout << i << ", " << f << ", " << d << endl ;}
像上面这样,只能够在TestClass.cpp中调用Func函数。岂不是很痛苦?
函数重载时谨慎使用默认参数值
比如下面两个重载函数func,一个只接受一个参数,而另一个接受两个参数,包括一个默认参数。
class Test{public: int func(int a) { return a; } int func(int a, int b = 1) { return a + b; }} ;
如果像下面这样调用函数
int main(void) { Test test; int result = test.func(1); getchar() ; return 0 ; }
则编译器就不知道选择哪个函数,这就造成了混淆。
==
void Func(int i = 1, float f = 2.0f, double d = 3.0){ cout << i << ", " << f << ", " << d << endl ;}int main(void){ Func() ; // 1, 2, 3 Func(10) ; // 10, 2, 3 Func(10, 20.0f) ; // 10, 20, 3 Func(10, 20.0f, 30.0) ; // 10, 20, 30return 0 ;}
参数的值也可以是表达式,这样,表达式将在函数被调用的时候求值,比如下面的func函数,第二个参数值是通过函数调用得到的,每次调用func函数时,该函数都会调用getValue来获取b的值。
class Test{public: static int getValue() { return 1; } int func(int a, int b = getValue()) { return b; }} ;
如果某个参数是默认参数,那么它后面的参数必须都是默认参数
下面两种情况都可以
void Func(int i, float f = 2.0f, double d = 3.0) ;void Func(int i, float f, double d = 3.0) ;
但是这样就不可以
void Func(int i, float f = 2.0f, double d) ;
默认参数的连续性能保证编译器正确的匹配参数。所以可以下这样一个结论,如果一个函数含有默认参数,那么它的最后一个参数一定是默认参数。
默认参数可以放在函数声明或者定义中,但只能放在二者之一
通常我们都将默认参数放在函数声明中,因为如果放在函数定义中,那么将只能在函数定义所在地文件中调用该函数。(为什么呢?)
.h文件
class TestClass{public: void Func(int i, float f, double d) ;};
.cpp文件
#include "TestClass.h"void TestClass::Func(int i = 1, float f = 2.0f, double d = 3.0){ cout << i << ", " << f << ", " << d << endl ;}
像上面这样,只能够在TestClass.cpp中调用Func函数。岂不是很痛苦?
函数重载时谨慎使用默认参数值
比如下面两个重载函数func,一个只接受一个参数,而另一个接受两个参数,包括一个默认参数。
class Test{public: int func(int a) { return a; } int func(int a, int b = 1) { return a + b; }} ;
如果像下面这样调用函数
int main(void) { Test test; int result = test.func(1); getchar() ; return 0 ; }
则编译器就不知道选择哪个函数,这就造成了混淆。
==
- [C++]默认参数
- c如何实现默认参数
- C#: 方法的默认参数
- 函数默认参数(C#)
- C语言 函数默认参数
- C/C++可变参数与默认参数
- C/C++参数(默认参数、占位符参数)
- C++_有默认参数的函数
- c语言小技巧-类似默认参数
- C语言默认参数值的实现
- C语言之默认参数提升
- Problem C: 默认参数:求圆面积
- Problem C: 默认参数:求圆面积
- C语言可变长参数函数与默认参数提升
- C语言可变长参数函数与默认参数提升
- C语言可变长参数函数与默认参数提升
- C语言可变长参数函数与默认参数提升
- c++/c中函数默认参数的详细解析
- 实现c++类的多重继承
- QSettings读写注册表和ini文件
- 下拉菜单隐藏箭头
- Symmetric Tree-LeetCode
- 密码框提示文字
- C++默认参数
- oracle表空间查询维护命令大全之三(临时表空间)史上最全
- java.lang.ClassNotFoundException: org.apache.commons.pool.KeyedObjectPoolFactory解决方案
- AIX6.1/11.2.0.3数据库上关于SWAP的一个BUG
- iOS开发中@property的属性weak nonatomic strong readonly等介绍
- 查询返回的字段显示($,$slice,$elemMatch)
- TestNg依赖配置基础用法(单一方法依赖)------TestNg依赖详解(一)
- Java 信号量 Semaphore 介绍
- Android中实时获取声音频率