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

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, 30
return 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 ;
}

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

==

作者:zdd

C++默认参数(转)的更多相关文章

  1. python中的默认参数

    https://eastlakeside.gitbooks.io/interpy-zh/content/Mutation/ 看下面的代码 def add_to(num, target=[]): tar ...

  2. python3 函数的形参、实参、位置参数、默认参数、关键字参数以及函数的递归

    python 版本 3.5 #Author by Andy#_*_ coding:utf-8 _*_def func(x,y=2): print('我是形参%s'%x) print('我是默认参y-- ...

  3. [c++]默认参数

     =================默认参数==================在函数声明时表明默认值,在函数定义时正常定义void function(int a = 2)// 函数声明void fu ...

  4. ES6函数默认参数(Default Parameters)

    语言更新时每一个新增的特性都是从千百万开发者需求里提取过来的,规范采用后能减少程序员的痛苦,带来便捷. 我们经常会这么写 function calc(x, y) { x = x || 0; y = y ...

  5. C++中函数的默认参数和C语言中volatile的学习

    1.函数默认参数 1 int func(int a,int b=10) 2 { 3 return a*b; 4 } 5 6 int main() 7 { 8 int c=func(2); 9 cout ...

  6. 【matlab】设定函数默认参数

    C++/java/python系列的语言,函数可以有默认值,通常类似如下的形式: funtion_name (param1, param2=default_value, ...) 到了matlab下发 ...

  7. Delphi函数参数传递 默认参数(传值)、var(穿址)、out(输出)、const(常数)四类

    Delphi的参数可以分为:默认参数(传值).var(传址).out(输出).const(常数)四类 可以对比C/C++的相关知识,类比学习. 1.默认参数是传值,不会被改变,例子 function ...

  8. 我的c++学习(6)默认参数和内联函数

    默认参数 一般情况下,函数调用时实参个数应与形参相同,但为了更方便地使用函数,C++也允许定义具有默认参数的函数,这种函数调用时实参个数可以与形参不相同.“默认参数”指在定义或声明函数时为形参指定默认 ...

  9. 海蜘蛛WiFiDog固件 MTK7620 OEM,带云AC功能、探针、广告插入,MTK7620解包打包维修默认参数

    修改内容: 1.系统默认管理员员帐号密码 2.系统默认LAN 接口地址 3.系统默认DHCP及保留地址 4.系统默认云AC远程地址及协议内容 5.系统默认JS插入地址 6.系统默认探针位置 7.默认顶 ...

  10. c++有默认参数的函数---4

    原创博客:转载请标明出处:http://www.cnblogs.com/zxouxuewei/ 1.默认参数的目的 C++可以给函数定义默认参数值.通常,调用函数时,要为函数的每个参数给定对应的实参. ...

随机推荐

  1. VC下的人人对弈五子棋(dos)

    #include"stdio.h"#include"stdlib.h"#include"string.h"#include "io ...

  2. 通过DB_LINK按照分区表抽取数据

    DB:11.2.0.3.0OS:oracle-linux 5.7 建表语句:create table YOON.YOON_HIS(  c_id              NUMBER not null ...

  3. hdu 1873 看病要排队

    题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=1873 看病要排队 Description 看病要排队这个是地球人都知道的常识.不过经过细心的0068的 ...

  4. Windows Phone Listbox虚拟化的问题

    最近在项目里面碰到最头疼的一个难题就是Listbox虚拟化的问题,查阅很多文档其实Listbox本身是支持虚拟化的,那么在什么情况下会破坏Listbox的虚拟化呢?目前我接触到的主要有两个原因:一.是 ...

  5. 人脸检测的API例子

    package cliu.TutorialOnFaceDetect; /* * MyImageView.java * Download by http://www.codefans.net * [AU ...

  6. libevent I/O示例

    I/O示例使用一个windows平台上服务器/客户端的例子来演示.由于为了减少代码篇幅等各种由于本人懒而产生的原因,以下代码没有做错误处理以及有些小问题,但是我想应该不影响演示,大家多包涵. 服务器代 ...

  7. iOS学习之C语言循环结构

    一.while循环    while (循环条件) {        循环体:    }    // 1.定义循环变量    int time = 1;    // 2.循环条件    while ( ...

  8. 关于sqlserver身份登录失败的解决方法

    前几天写程序需要用到数据库,下载了一个用用,出现了不少的小问题(都怪我的32bit不争气的笔记本),有问题不要怕,至少证明我们在思考解决方案.废话不说了,直接上正题. Sqlserver有两种登陆方式 ...

  9. Java Day 08

    数组工具对象建立 多个.java文件先编译谁 数组工具类中静态的使用 构造函数私有化 数组工具类--文档注释 设计模式 -- 单例设计模式 保证一个类在内存中的对象唯一性 1.不允许其他程序使用new ...

  10. [vsftp服务]——ftp虚拟用户、权限设置等的实验

    搭建ftp服务器,满足以下要求: 1.允许匿名用户登录服务器并下载文件,下载速度设置为最高2MB/s 2.不允许本地用户登录ftp服务器 3.在服务器添加虚拟用户vuser01.vuser02.vus ...