博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++默认参数(转)
阅读量:4616 次
发布时间:2019-06-09

本文共 1560 字,大约阅读时间需要 5 分钟。

函数的默认参数值,即在定义参数的时候同时给它一个初始值。在调用函数的时候,我们可以省略含有默认值的参数。也就是说,如果用户指定了参数值,则使用用户指定的值,否则使用默认参数的值。

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 ; }

则编译器就不知道选择哪个函数,这就造成了混淆。

==

作者:
出处:

转载于:https://www.cnblogs.com/sage-blog/p/4028736.html

你可能感兴趣的文章
java的reflection和introspector
查看>>
在win7电脑中如何查看运行进程的PID标识符
查看>>
[Vue] vue-cli3.0安装
查看>>
Struts2(十五)实现文件上传
查看>>
推荐几个精致的web UI框架
查看>>
Linux学习书目
查看>>
发现一个animate的小应用
查看>>
html 14 h1-h6 p img 自闭合标签 闭合标签 替换式元素 有序编号,无需编号
查看>>
【bzoj3196】Tyvj 1730 二逼平衡树 线段树套Treap
查看>>
java单例模式
查看>>
以太坊Go、Java、Python、Ruby、JS客户端介绍
查看>>
AcDream 1081 平衡树 Tire树
查看>>
SQL server存储过程,触发器,游标相关实例
查看>>
linux环境下安装solr
查看>>
4~20mA
查看>>
128階數的Shunt音量控制器
查看>>
Delphi 完整的Bug决议工具EurekaLog的使用
查看>>
linux上安装php+gd扩展
查看>>
输入一串字符,对其逆序输出 Reversed.java
查看>>
输入每个值连续出现几次的问题(其中包括while括号中出现任意输入问题)
查看>>