关于函数定义缺省实参的问题

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

函数这一章看到现在,感觉就定义缺省实参这块比较有趣。


一、缺省实参定义顺序是什么?

从无到有,最开始比较重要的形参无序定义缺省实参,不重要的,默认的等于某个固定参数的形参放在函数最后,可以定义缺省实参,也就是说,一旦定义了缺省实参,那么这个形参后面都要的形参都要定义缺省实参。
下面展示一些 内联代码片

void fun(int x,int y=1,int z=2)
{
......
}

为什么要这样写?因为传入的实参是按照从左到右的顺序匹配实参,这样定义可以先让没有被缺省定义的形参先被拷贝实参。

fun(1,2);
//这时实参1优先传给x,2传递给y

当然要注意,时间顺序上,是先把1拷贝给x,还是先把2拷贝给y,不同的编译器不一样,所以要避免写出fun(x++,x++)这种代码。

二、每个翻译单元中,缺省实参只能定义一次

1.一个.cpp文件中缺省实参不能被重复定义

代码如下(示例):

//我们这里引入两个声明,在声明中定义缺省实参,这本身并没有问题,
//问题出在z在两个声明中重复定义了。
void fun(int x,int y=1,int z=2);
void fun(int x,int y,int z=2);

但是,在不同的.cpp文件中,缺省实参是可以重复定义的,因为每个翻译单元在编译期是单独处理的,所以我完全可以再新建一个fun.cpp,在这个新的翻译单元中写一个声明来定义z。

2.缺省实参只能定义一次的意义

这是为了分级指定缺省实参。我们之前提到,在一个函数里,形参的重要性是逐渐降低的,比如x很重要,y相对没那么重要,z的值几乎是默认的。这时我们可以定义一个头文件header.h(根)

void fun(int x,int y,int z=2);

z的值一般不需要被修改,所以我们在这个头文件里给z赋好默认值,以后直接在main函数里引用这个头文件就行了,因为调用头文件相当于把头文件内的声明直接拷贝到main。
然后定义一个头文件header1.h(枝叶),里面存取相对不重要的y

void fun(int x,int y=3,int z);

同样在main里直接调用这个头文件就行

这样,最后在main里面,我们只需要给最重要的x赋值就行了。

fun(1);

总结

这里定义缺省实参的主要用处就是分级指定

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值