>[info] # 有默认值的参数
1. 函数调用的实参按位置解析,缺省实参只能用来替换函数调用缺少的尾部实参。
2. 定义/声明时,默认参数应**从右向左**依次定义。
> `int fun(int a = 0,double b,char c)`
> //error
> `int fun(int a,double b,char c = '\n')`
> //ture
3. 调用函数时, 参数**从左向右**匹配。
## **例子**
~~~
#include <iostream>
using namespace std;
int fun(int a = 0,int b = 1,int c = 2,int d = 3)
{
cout<<"a="<<a<<";b="<<b<<";c="<<c<<";d="<<d<<";"<<endl;
return 0;
}
int main()
{
fun(2019);//a=2019
fun(22,33);//a=22 b=33
fun(2019,2020,2021);//a=2019 b=2020 c=2021
fun(2017,2018,2019,2020);//a=2017 b=2018 c=2019 d=2020
}
~~~
> 运行结果 a=2019;b=1;c=2;d=3; a=22;b=33;c=2;d=3; a=2019;b=2020;c=2021;d=3; a=2017;b=2018;c=2019;d=2020; Press any key to continue
1. 既有声明又有定义时,定义中可省略默认参数;只有定义时,默认参数须出现在定义中。
2. 普通局部变量和含有普通局部变量的表达式不能作为默认实参。除此之外,只要表达式的类型能转换成形参所需的类型,该表达式就能作为默认实参。
> 因为函数的定义和声明在编译之前就确定了,此时普通局部变量的位置和值还没有确定。但是默认值的计算发生在函数调用时期。
- 介绍
- 编程设计语言
- 第一章 对C++的初步认识
- 1.2 最简单的C++程序
- 1.3 C++对C的补充
- 1.3.1 return
- 1.3.2 输入输出流
- 1.3.3 putchar 和 getchar
- 1.3.4 用const定义常变量
- 1.3.5 函数原型声明
- 1.3.6 内置函数
- 1.3.7 函数重载
- 1.3.8 函数模板
- 1.3.9 有默认值的参数
- 1.3.10 作用域
- 1.3.11 const修饰指针
- 1.3.12 引用
- 1.3.13 生命期
- 1.3.14 变量
- 1.3.15 字符串变量
- 第二章 类与对象
- 2.2 类的声明和对象的定义
- 2.3 类的成员函数
- 第三章 关于类和对象的进一步讨论
- 3.1 构造函数
- 3.1.1 对象的初始化
- 3.1.2 构造函数
- 3.2 析构函数
- 3.3调用析构函数和构造函数的顺序
- 3.4 对象数组
- 3.5 对象指针
- 3.6 共享数据的保护
- 3.7 对象的建立与释放
- 3.8 对象的赋值与复制
- 3.9 静态成员
- 3.10 友元
- 3.11 类模板
- 第四章 运算符重载
- 数据类型转换
- 运算符重载
- 重载流插入运算符和流提取运算符
- 第五章 继承与派生
- 继承与派生
- 第六章 多态性与虚函数
- 多态性
- 虚函数
- 纯虚函数与抽象类