C++ 知识点03 缺省参数
C 缺省参数默认参数一、什么是缺省参数缺省参数 函数参数给一个默认值调用函数时传了实参用你传的值没传实参自动用默认值二、基础语法返回值 函数名(参数1, 参数2 默认值);三、基础示例代码示例 1单个默认参数#include iostream using namespace std; // 给 b 设置缺省值 10 void func(int a, int b 10) { cout a a , b b endl; } int main() { // 只传一个参数b用默认值 func(5); // 传两个参数覆盖默认值 func(5, 20); return 0; }运行结果a 5, b 10 a 5, b 20四、核心规则 1有默认值的参数必须靠右❌ 错误写法// 非法左边有默认右边没有 void test(int a 10, int b);✅ 正确写法从右往左连续给默认值#include iostream using namespace std; void test(int a, int b 20, int c 30) { cout a b c endl; } int main() { test(1); // a1b、c用默认 test(1, 2); // a1,b2c用默认 test(1, 2, 3); // 全部自己传 return 0; }运行结果1 20 30 1 2 30 1 2 3记住默认参数只能从最右边开始给不能中间隔一个不给。五、核心规则 2声明和定义只能给一次默认值错误示范重复给默认// 声明给了默认 void fun(int x 100); // 定义又给一遍编译报错 void fun(int x 100) { cout x endl; }正确规范写在函数声明上定义不写#include iostream using namespace std; // 声明给缺省值 void fun(int x 100); // 定义只写参数类型不写默认值 void fun(int x) { cout x x endl; } int main() { fun(); // 用默认 fun(200); // 传参覆盖 return 0; }六、核心规则 3缺省参数可以是常量、全局变量、表达式#include iostream using namespace std; int g 50; // 默认值可以用全局变量、表达式 void show(int a, int b g 10) { cout a b endl; } int main() { show(10); show(10, 100); return 0; }运行结果10 60 10 100七、缺省参数 与 函数重载 坑点重点易错缺省参数容易和重载产生二义性编译器不知道该调用哪个。错误示例编译报错#include iostream using namespace std; void f(int a) { cout f(int) endl; } // 有缺省参数 void f(int a, int b 10) { cout f(int,int) endl; } int main() { // 报错分不清调用哪个f f(5); return 0; }原因f(5)既可以匹配f(int)也可以匹配f(int,int)b 用默认产生歧义。八、无参函数缺省参数#include iostream using namespace std; void hello(string s Hello C) { cout s endl; } int main() { hello(); // 用默认 hello(你好); // 自己传 return 0; }九、知识点总结必背缺省参数函数参数给默认值不传参就用默认。规则默认参数必须从右往左连续定义不能穿插。声明和定义只能一处写默认值推荐写在声明。默认值可以是常量、全局变量、合法表达式。缺省参数容易和函数重载产生二义性要避免。调用时传了实参就覆盖默认没传就用默认。