2024年最新C++函数的默认参数详解_c++ 函数默认参数,大厂面经合集

img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

//只为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){ }


默认参数并非编程方面的重大突破,而只是提供了一种便捷的方式。在以后设计类时你将发现,通过使用默认参数,可以减少要定义的析构函数、方法以及方法重载的数量。


本节的例子中,我们在函数定义处指定了默认参数。除了函数定义,你也可以在函数声明处指定默认参数。不过当出现函数声明时情况会变得稍微复杂,很多书籍也对这点含糊其辞,我们将在下节《[到底在声明中还是定义中指定默认参数]( )》中详细讲解。


## 到底在声明中还是定义中指定默认参数


上节的例子中,我们在函数定义处指定了默认参数。除了函数定义,你也可以在函数声明处指定默认参数。不过当出现函数声明时情况会变得稍微复杂,有时候你可以在声明处和定义处同时指定默认参数,有时候你只能在声明处指定,请看下面的例子(示例1):



#include
using namespace std;
void func(int a, int b = 10, int c = 36);
int main(){
func(99);
return 0;
}
void func(int a, int b = 10, int c = 36){
cout<<a<<", “<<b<<”, "<<c<<endl;
}


这段代码在编译时会报错,错误信息表明不能在函数定义和函数声明中同时指定默认参数。对代码稍作修改,将 func() 函数的定义放到其他源文件中,如下所示(示例2)。


main.cpp 代码:



#include
using namespace std;
void func(int a, int b = 10, int c = 36);
int main(){
func(99);
return 0;
}


module.cpp 代码:



#include
using namespace std;
void func(int a, int b = 10, int c = 36){
cout<<a<<", “<<b<<”, "<<c<<endl;
}


运行结果:  
 99, 10, 36


修改后的代码是可以编译通过的,这有点让人摸不着头脑,为什么将 func() 的定义放到其他源文件中就不一样了呢?



> 
> 如果读者对多文件编程不了解,请阅读《[C语言多文件编程]( )》,C++ 在多文件编程方面仍然在使用C语言的规则。
> 


![img](https://i-blog.csdnimg.cn/blog_migrate/017023baad57e7e2ed580b44272fb289.png)
![img](https://img-blog.csdnimg.cn/img_convert/e4cb1ec0badfff0c00590674f18bed1d.png)

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!**

**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**

**[如果你需要这些资料,可以戳这里获取](https://bbs.csdn.net/topics/618668825)**

!**

**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**

**[如果你需要这些资料,可以戳这里获取](https://bbs.csdn.net/topics/618668825)**

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值