C++函数的默认参数详解
在C++中,定义函数时可以给形参指定一个默认的值,这样调用函数时如果没有给这个形参赋值(没有对应的实参),那么就使用这个默认的值。也就是说,调用函数时可以省略有默认值的参数。如果用户指定了参数的值,那么就使用用户指定的值,否则使用参数的默认值。
所谓默认参数,指的是当函数调用中省略了实参时自动使用的一个值,这个值就是给形参指定的默认值。下面是一个简单的示例:
10, 3.5, #
20, 9.8, @
30, 1.2, @
本例定义了一个带有默认参数的函数 func(),并在 main() 函数中进行了不同形式的调用。为参数指定默认值非常简单,直接在形参列表中赋值即可,与定义普通变量的形式类似。
指定了默认参数后,调用函数时就可以省略对应的实参了。
默认参数除了使用数值常量指定,也可以使用表达式指定,例如:
C++规定,默认参数只能放在形参列表的最后,而且一旦为某个形参指定了默认值,那么它后面的所有形参都必须有默认值。实参和形参的传值是从左到右依次匹配的,默认参数的连续性是保证正确传参的前提。
下面的写法是正确的:
默认参数并非编程方面的重大突破,而只是提供了一种便捷的方式。在以后设计类时你将发现,通过使用默认参数,可以减少要定义的析构函数、方法以及方法重载的数量。
本节的例子中,我们在函数定义处指定了默认参数。除了函数定义,你也可以在函数声明处指定默认参数。不过当出现函数声明时情况会变得稍微复杂,很多书籍也对这点含糊其辞,我们将在下节《到底在声明中还是定义中指定默认参数》中详细讲解。
所谓默认参数,指的是当函数调用中省略了实参时自动使用的一个值,这个值就是给形参指定的默认值。下面是一个简单的示例:
#include<iostream> using namespace std; //带默认参数的函数 void func(int n, float b=1.2, char c='@'){ cout<<n<<", "<<b<<", "<<c<<endl; } int main(){ //为所有参数传值 func(10, 3.5, '#'); //为n、b传值,相当于调用func(20, 9.8, '@') func(20, 9.8); //只为n传值,相当于调用func(30, 1.2, '@') func(30); return 0; }运行结果:
10, 3.5, #
20, 9.8, @
30, 1.2, @
本例定义了一个带有默认参数的函数 func(),并在 main() 函数中进行了不同形式的调用。为参数指定默认值非常简单,直接在形参列表中赋值即可,与定义普通变量的形式类似。
指定了默认参数后,调用函数时就可以省略对应的实参了。
默认参数除了使用数值常量指定,也可以使用表达式指定,例如:
float d = 10.8; void func(int n, float b=d+2.9, char c='@'){ cout<<n<<", "<<b<<", "<<c<<endl; }
C++规定,默认参数只能放在形参列表的最后,而且一旦为某个形参指定了默认值,那么它后面的所有形参都必须有默认值。实参和形参的传值是从左到右依次匹配的,默认参数的连续性是保证正确传参的前提。
下面的写法是正确的:
void func(int a, int b=10, int c=20){ } void func(int a, int b, int c=20){ }但这样写不可以:
void func(int a, int b=10, int c=20, int d){ } void func(int a, int b=10, int c, int d=20){ }
默认参数并非编程方面的重大突破,而只是提供了一种便捷的方式。在以后设计类时你将发现,通过使用默认参数,可以减少要定义的析构函数、方法以及方法重载的数量。
本节的例子中,我们在函数定义处指定了默认参数。除了函数定义,你也可以在函数声明处指定默认参数。不过当出现函数声明时情况会变得稍微复杂,很多书籍也对这点含糊其辞,我们将在下节《到底在声明中还是定义中指定默认参数》中详细讲解。
所有教程
- C语言入门
- C语言编译器
- C语言项目案例
- 数据结构
- C++
- STL
- C++11
- socket
- GCC
- GDB
- Makefile
- OpenCV
- Qt教程
- Unity 3D
- UE4
- 游戏引擎
- Python
- Python并发编程
- TensorFlow
- Django
- NumPy
- Linux
- Shell
- Java教程
- 设计模式
- Java Swing
- Servlet
- JSP教程
- Struts2
- Maven
- Spring
- Spring MVC
- Spring Boot
- Spring Cloud
- Hibernate
- Mybatis
- MySQL教程
- MySQL函数
- NoSQL
- Redis
- MongoDB
- HBase
- Go语言
- C#
- MATLAB
- JavaScript
- Bootstrap
- HTML
- CSS教程
- PHP
- 汇编语言
- TCP/IP
- vi命令
- Android教程
- 区块链
- Docker
- 大数据
- 云计算