C++中函数参数的扩展

xiaoxiao2022-06-24  2

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 <stdio.h> 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 <stdio.h> 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 <stdio.h> 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 <stdio.h> 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 语言中的不规范写法; [深圳网站建设](https://www.sz886.com/) https://www.sz886.com/