当前位置: 首页 > news >正文

函数:重载、默认参数与内联

函数:重载、默认参数与内联

C++ 函数的扩展能力

在 C 语言函数 中,我们学习了函数定义、参数传递、返回值与递归。C++ 在此基础上增加了函数重载默认参数inline函数模板,使函数更加灵活强大。


一、C 函数基础(链接)

C++ 完全支持 C 风格函数:定义、调用、值传递、指针传递、返回值、递归等。

详见 C 第 09 篇。

C++ 推荐:大对象用const T&传递,避免拷贝(见 第 04 篇)。


二、函数重载

同一作用域内,函数名相同但参数列表不同(类型或个数),编译器根据实参选择匹配版本:

#include<iostream>intadd(inta,intb){returna+b;}doubleadd(doublea,doubleb){returna+b;}intadd(inta,intb,intc){returna+b+c;}intmain(){std::cout<<add(1,2)<<std::endl;// 调用 int 版std::cout<<add(1.5,2.5)<<std::endl;// 调用 double 版std::cout<<add(1,2,3)<<std::endl;// 调用三参数版return0;}

重载规则:

  • 仅返回值不同不能构成重载
  • 参数个数或类型必须不同
  • C 不支持重载,C++ 支持

三、默认参数

函数参数可指定默认值,调用时可省略:

#include<iostream>voidgreet(conststd::string&name,conststd::string&prefix="Hello"){std::cout<<prefix<<", "<<name<<"!"<<std::endl;}intmain(){greet("Alice");// Hello, Alice!greet("Bob","Hi");// Hi, Bob!return0;}

规则:

  • 默认参数从右向左连续:void f(int a, int b = 0, int c = 0);合法
  • 默认参数在声明中指定(定义中可省略)
  • 默认参数与重载配合使用需谨慎,避免歧义

四、inline 函数

inline建议编译器将函数体 inline 展开,减少调用开销(适用于短小的频繁调用函数):

inlineintsquare(intx){returnx*x;}
  • 定义通常放在头文件中
  • 现代编译器会自动 inline,显式inline更多是 ODR 相关
  • 类内定义的成员函数默认为 inline

五、函数模板(初探)

编写与类型无关的函数,编译器根据实参类型生成具体版本:

#include<iostream>template<typenameT>Tmaximum(T a,T b){return(a>b)?a:b;}intmain(){std::cout<<maximum(3,5)<<std::endl;// intstd::cout<<maximum(3.14,2.71)<<std::endl;// doublereturn0;}

模板详解见 第 12 篇。


六、constexpr 函数(C++11)

编译期可求值的函数:

constexprintfactorial(intn){return(n<=1)?1:n*factorial(n-1);}intarr[factorial(5)];// 120 元素数组,编译期确定

七、实战练习

练习1:重载 print

编写print(int)print(double)print(const std::string&)三个重载。

练习2:默认参数

编写void draw(char ch = '*', int count = 5),打印 count 个 ch。

练习3:函数模板

编写模板函数swap(T& a, T& b)交换两值。


八、总结与延伸

本节重点回顾

  1. 函数重载:同名不同参,C 不支持
  2. 默认参数:从右向左,声明处指定
  3. inline:建议内联,短小函数适用
  4. 函数模板template<typename T>泛型编程入门

下节预告

进入进阶阶段:《类与对象:面向对象基础》。

延伸阅读

  • C 语言函数
  • C++ 速查 §5 函数与重载

📌知识点卡片

  • 重载:参数类型/个数不同;仅返回值不同无效
  • 默认参数:void f(int a, int b = 0);
  • template T func(T x);

下一篇见!

http://www.jsqmd.com/news/1233093/

相关文章:

  • I2C总线时钟同步与仲裁机制深度解析:从原理到嵌入式实践
  • LangChain与LangGraph对比:复杂AI工作流开发指南
  • grill之后怎么开工:PRD落规格 → 垂直拆活 → TDD跑通第一个issue
  • 沧州市海兴县2026最新黄金回收门店及联系方式指南 黄金回收白银回收铂金回收店铺TOP5排行榜 - 大熊猫898989
  • WebMCP技术解析:Chrome重构AI与网页交互的新范式
  • 赋能能源产业,黑龙江单工科技助力工矿企业安全生产
  • Sol2深度解析:现代C++与Lua无缝集成的艺术与实践
  • 【AI大模型微调】第 5 章 微调方法选择
  • AI初创公司五大认知陷阱与避坑指南
  • C++水仙花数算法实现:从基础循环到函数封装与优化
  • Nano Banana Pro、Nano Banana 2、Lite不是三个画质档位
  • CapCut AI:2小时制作专业宣传片的技术解析
  • AI工作流如何重塑产品经理的核心竞争力
  • 提示工程核心技能:从基础到实战的5大关键
  • LangGraph与CrewAI多智能体框架对比与选型指南
  • AI程序员规模化实践:Codex智能体架构与开发效能分析
  • 沧州市南皮县2026最新黄金回收门店及联系方式指南 黄金回收白银回收铂金回收店铺TOP5排行榜 - 大熊猫898989
  • 为什么淘宝新店别乱做推广?
  • Davinci Developer的名称的冗余使用
  • # 2026年聊城刑事律师选对省心 杜志强律师值得推荐 - 本地品牌推荐
  • 2026年被问「为什么离职」总踩雷?AI紧急救援方案——5种高风险离职场景的零风险回答
  • 第 5 篇:让轮子真正转起来——PWM、编码器与 PID 闭环
  • 深入解析ePWM事件触发与数字比较:硬件级实时控制的关键技术
  • Adobe Animate停运:动画制作工具的技术遗产与替代方案
  • 沧州市青县2026最新黄金回收门店及联系方式指南 黄金回收白银回收铂金回收店铺TOP5排行榜 - 大熊猫898989
  • 智能代码Agent:自动修复API变更引发的兼容性问题
  • 昇腾Ascend C异步Iterate接口:AIC与AIV通信性能优化实战
  • 高德问店AI选址:数据智能驱动实体商业决策创新
  • Java 稀疏数组实现(二维数组 ↔ 稀疏数组 互转)
  • 2026年物流公司推荐榜:高效智慧物流/冷链专线/整车零担/跨境货运头部企业实力优选 - 甄选服务推荐