C/C++知识点之函数参数的扩展
从安 2019-06-05 来源 : 阅读 791 评论 0

摘要:本篇文章主要讲述C/C++知识点之函数参数的扩展,希望阅读本篇文章以后大家有所收获,帮助大家对相关内容的理解更加深入。

本篇文章主要讲述C/C++知识点之函数参数的扩展,希望阅读本篇文章以后大家有所收获,帮助大家对相关内容的理解更加深入。

C/C++知识点之函数参数的扩展

1,C++ 可以看成是一种更好的 C 语言,所以 C++ 会考虑 C 的欠缺部分,然后给  与一些补充和扩展,本节课讲述 C++ 对函数参数的非常重要的扩展;

 

2,函数参数的默认值:

    1,C++ 中可以在函数声明时为参数提供一个默认值;

       1,也可以在函数声明和定义在一起的时候来提供默认值;

    2,作用是当函数调用时没有提供参数的值,则使用默认值;

    3,int mul(int x = 0);  // 函数的前项声明,这里使用了默认值;

1 int main(int argc, char* argv[]) 
2 { 
3     printf("%d\n", mul());  // mul(0) 
4  
5     return 0; 
6 } 
7  
8 int mul(int x)  //函数声明的时候提供默认值,定义的时候没有必要提供; 
9 {
10     return x * x;
11 }

 

3,参数的默认值必须在函数声明中指定:

    1,问题:

       1,函数定义中是否可以出现参数的默认值?

           1,不可以,编译出错;

           2,当函数声明和定义在一起的时候,可以出现参数的默认值;

       2,当函数声明和定义中的参数默认值不同时会发生什么?

           1,不可以,编译出错;

    2,代码示例:

1 int mul(int x = 0);
2 
3 // ...
4 
5 int mul(int x = 5)
6 {
7     return x * x;
8 }

    3,默认参数值初探实例分析:

       1,main.cpp 文件:

1 #include  
2  
3 int mul(int x = 0); 
4  
5 int main(int argc, char *argv[]) 
6 { 
7     printf("%d\n", mul()); 
8     printf("%d\n", mul(-1)); 
9     printf("%d\n", mul(2));
10     
11     return 0;
12 }
13 
14 int mul(int x)
15 {
16     return x * x;
17 }
18 
19 /*
20 int mul(int x = 5)  // error: default argument given for parameter 1 of 'int mul(int)'
21 {
22     return x * x;
23 }
24 */

        2,输出结果:

           0

           1

           4

3,当上述代码用 C 语言编译时,第三行有错,证明了函数参数的默认值   是 C++ 语言对 C 语言的一个扩展;

 

4,函数默认参数的规则:

    1,函数设计时,多个参数的默认值必须从右向左提供;

       1,这个设计,是指函数声明或者函数声明和定义在一起的时候;

    2,函数调用时,使用了默认值,则后续参数必须使用默认值;

1 int add(int x, int y = 1, int z = 2)  // 这里即是声明,也是调用;
2 {
3      return x + y + z;
4 }
5 
6 add(0);  // x = 0, y = 1, z = 2;
7 add(2, 3);  // x = 2, y = 3, z = 2;
8 add(3, 2, 1);  // x = 3, y = 2, z = 1;

   

5,默认参数的错误示例编程实验:

    1,main.cpp 文件:

1 #include  
2  
3 int add(int x, int y = 0, int z = 0); //当 z 未提供默认值的时候,编译器显示:error: default argument missing for parameter 3 of 'int add(int, int, int)' 
4  
5 int main(int argc, char *argv[]) 
6 { 
7     printf("%d\n", add(1)); 
8     printf("%d\n", add(1, 2)); 
9     printf("%d\n", add(1, 2, 3));
10     
11     return 0;
12 }
13 
14 int add(int x, int y, int z)
15 {
16     return x + y + z;
17 }

    2,输出结果:

       1

       3

       6.

 

6,函数占位参数:

    1,在 C++ 中可以为函数提供占位参数;

       1,占位参数只有参数类型声明,而没有参数名声明;

           1,占位参数本质也是函数参数;

           2,占位参数:有类无名; 

       2,一般情况下,在函数体内部无法使用占位参数;

           1,没有名字,所以在函数体内部无法使用;

    2,代码示例:

1 int func(int x, int)
2 {
3      return x;
4 }
5 
6 // ...
7 
8 func(1, 2);  // ok,这是占位参数的用途;

 

7,函数占位参数的意义:

    1,占位参数与默认参数结合起来使用;

    2,兼容 C 语言程序中可能出现的不规范写法;

       1,void func(); 与 void func(void); 两种声明方式等价吗?

           1,在 C 语言中,前者接受任意多参数,后者不接受参数,因此不 等价;

           2,在 C++ 语言中,等价;

       2,在 C++ 中,最少的改动,就能够兼容 C 程序,且不用带来 bug;

       3,代码示例:

1 #include  
2  
3 void func()  // 从 C 到 C++,更改为 void func(int, int)即可; 
4 { 
5 } 
6  
7 int mian(int argc, char* argv[]) 
8 { 
9     // func();  //若在 C 中也有这一行代码,C++ 中只用占位参数时,这里错误,可以结合默认参数值,更改为 void func(int = 0, int = 0);
10     func(1, 2);  // C++ 中不用占位参数时,这里错误;
11     
12     return 0;
13 }

 

8,占位参数与默认参数值编程实验:

    1,main.cpp 文件:

1 #include  
2  
3 int func(int x, int = 0); 
4  
5 int main(int argc, char *argv[]) 
6 { 
7     printf("%d\n", func(1));  // 利用默认参数; 
8     printf("%d\n", func(2, 3));  // 利用占位参数; 
9     
10     return 0;
11 }
12 
13 int func(int x, int)
14 {
15     return x;
16 }

 

9,小结:

    1,C++ 中支持函数参数的默认值;

    2,如果函数调用时没有提供参数值,则使用默认值;

    3,参数的默认值必须使从右向左提供;

    4,参数调用时使用了默认值,则后续参数必须使用默认值;

    5,C++ 中支持占位参数,用于兼容 C 语言中的不规范写法;

 

本文由职坐标整理发布,学习更多的相关知识,请关注职坐标IT知识库!

本文由 @从安 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程