news 2026/5/8 15:20:54

C++ 知识点03 缺省参数

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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); // a=1,b、c用默认 test(1, 2); // a=1,b=2,c用默认 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; }

九、知识点总结(必背)

  1. 缺省参数:函数参数给默认值,不传参就用默认。

  2. 规则:默认参数必须从右往左连续定义,不能穿插。

  3. 声明和定义只能一处写默认值,推荐写在声明。

  4. 默认值可以是:常量、全局变量、合法表达式。

  5. 缺省参数容易和函数重载产生二义性,要避免。

  6. 调用时:传了实参就覆盖默认,没传就用默认。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/8 15:17:49

人像抠图怎么制作?2026年最全工具对比和实操指南

前两天有个朋友问我&#xff1a;"为什么你的证件照看起来这么专业&#xff1f;"其实秘诀就在于一个好的抠图工具。现在网上人像抠图的工具确实多&#xff0c;但要说真正好用的&#xff0c;我用了这么多年&#xff0c;还是有些工具让我特别满意。 今天我就把我自己的…

作者头像 李华
网站建设 2026/5/8 15:10:51

长期项目使用Taotoken聚合API的月度账单与用量分析

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 长期项目使用Taotoken聚合API的月度账单与用量分析 在为期一个月的开发项目中&#xff0c;我们通过Taotoken平台统一接入了多种大语…

作者头像 李华
网站建设 2026/5/8 15:03:32

告别繁琐配置:NsEmuTools如何用智能自动化重塑NS模拟器体验

告别繁琐配置&#xff1a;NsEmuTools如何用智能自动化重塑NS模拟器体验 【免费下载链接】ns-emu-tools 一个用于安装/更新 NS 模拟器的工具 项目地址: https://gitcode.com/gh_mirrors/ns/ns-emu-tools 还在为复杂的NS模拟器安装和配置而头疼吗&#xff1f;NsEmuTools正…

作者头像 李华
网站建设 2026/5/8 14:59:32

为什么FigmaCN中文界面插件能彻底改变你的设计工作流?

为什么FigmaCN中文界面插件能彻底改变你的设计工作流&#xff1f; 【免费下载链接】figmaCN 中文 Figma 插件&#xff0c;设计师人工翻译校验 项目地址: https://gitcode.com/gh_mirrors/fi/figmaCN 还在为Figma的英文界面感到困扰吗&#xff1f;专业术语难以理解&#…

作者头像 李华
网站建设 2026/5/8 14:57:36

Adobe-GenP:5分钟解锁Adobe全家桶的专业指南

Adobe-GenP&#xff1a;5分钟解锁Adobe全家桶的专业指南 【免费下载链接】Adobe-GenP Adobe CC 2019/2020/2021/2022/2023 GenP Universal Patch 3.0 项目地址: https://gitcode.com/gh_mirrors/ad/Adobe-GenP Adobe-GenP是一款专为Adobe Creative Cloud软件设计的通用激…

作者头像 李华