尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
函数:重载、默认参数与内联
函数重载、默认参数与内联C 函数的扩展能力在 C 语言函数 中我们学习了函数定义、参数传递、返回值与递归。C 在此基础上增加了函数重载、默认参数、inline和函数模板使函数更加灵活强大。一、C 函数基础链接C 完全支持 C 风格函数定义、调用、值传递、指针传递、返回值、递归等。详见 C 第 09 篇。C 推荐大对象用const T传递避免拷贝见 第 04 篇。二、函数重载同一作用域内函数名相同但参数列表不同类型或个数编译器根据实参选择匹配版本#includeiostreamintadd(inta,intb){returnab;}doubleadd(doublea,doubleb){returnab;}intadd(inta,intb,intc){returnabc;}intmain(){std::coutadd(1,2)std::endl;// 调用 int 版std::coutadd(1.5,2.5)std::endl;// 调用 double 版std::coutadd(1,2,3)std::endl;// 调用三参数版return0;}重载规则仅返回值不同不能构成重载参数个数或类型必须不同C 不支持重载C 支持三、默认参数函数参数可指定默认值调用时可省略#includeiostreamvoidgreet(conststd::stringname,conststd::stringprefixHello){std::coutprefix, 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五、函数模板初探编写与类型无关的函数编译器根据实参类型生成具体版本#includeiostreamtemplatetypenameTTmaximum(T a,T b){return(ab)?a:b;}intmain(){std::coutmaximum(3,5)std::endl;// intstd::coutmaximum(3.14,2.71)std::endl;// doublereturn0;}模板详解见 第 12 篇。六、constexpr 函数C11编译期可求值的函数constexprintfactorial(intn){return(n1)?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)交换两值。八、总结与延伸本节重点回顾函数重载同名不同参C 不支持默认参数从右向左声明处指定inline建议内联短小函数适用函数模板templatetypename T泛型编程入门下节预告进入进阶阶段《类与对象面向对象基础》。延伸阅读C 语言函数C 速查 §5 函数与重载知识点卡片重载参数类型/个数不同仅返回值不同无效默认参数void f(int a, int b 0);template T func(T x);下一篇见
RELATED

相关推荐

国内AI多模态技术突破与产业应用全景

国内AI多模态技术突破与产业应用全景

1. 国内AI模型的多模态崛起与技术背景2023年成为国内AI发展的分水岭,以文心一言、通义千问为代表的大模型在图像-文本联合理解、视频语义分析等典型多模态场景中展现出超越国际同行的表现。这种突破并非偶然,而是源于三个关键技术要素的成熟:…

📅 2026/8/23 17:05:58
Spring Boot与Kafka整合实战:微服务消息队列最佳实践

Spring Boot与Kafka整合实战:微服务消息队列最佳实践

1. 为什么选择Spring Boot与Kafka组合在微服务架构盛行的今天,消息队列已成为系统解耦的标配工具。我经历过从ActiveMQ到RabbitMQ的技术迭代,最终在2018年将核心系统迁移到Kafka。这个决定背后有几个关键考量:首先是吞吐量需求。我们的订单系…

📅 2026/8/23 17:05:58
MyBatis结果映射机制详解与实战优化

MyBatis结果映射机制详解与实战优化

1. 从零理解MyBatis结果映射机制 在SpringBoot整合MyBatis的开发场景中,结果映射是每个开发者必须掌握的核心理念。想象这样一个场景:当你从数据库查询出20条用户记录时,这些数据最初只是冰冷的二维表格形式,而我们需要将它们转化…

📅 2026/8/23 17:05:59
MORE NEWS

更多资讯

📰

用Docker私有化部署觅思文档:从零搭建团队知识库

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

C# POST请求Header设置全解析:从HttpClient到实战避坑指南

我先说明一下:项目标题明确要求的是“基础”教程,那这篇文章的核心任务就是把C#里发送带Header的POST请求这件事彻底讲透——从最底层的原理、到不同技术方案的写法、再到日常开发中一定会踩的坑,一次说清楚,不给读者留模糊地带。…

📰

TDSQL分布式数据库选型评估:兼容性、运维与性能实战

如果你正在做数据库选型,或者刚接手一套分布式系统的运维,TDSQL这个名字你大概率绕不开。作为腾讯云自研的分布式数据库,它直接对标的是"能不能用、好不好管、跑得快不快"这三件事——翻译成技术语言,就是兼容性、运维便…

📰

Gradle下载超时怎么办?镜像源、离线包与超时参数调优实战

今天把一个新人的项目拉到我电脑上,想先跑一次构建看看环境,结果 Android Studio 还在加载阶段就直接弹了一行红字:Could not install Gradle distribution from https://services.gradle.org/distributions/gradle-8.7-bin.zip。后面还跟着一…

📰

GTM与GA4事件追踪实战:从埋点原理到排错技巧全解析

做网站分析这一行,埋点永远是个绕不开的活儿。刚入行那会儿,我最烦的就是为了一两个按钮统计去麻烦开发改代码,提个需求排期三五天,改完上线再等数据积累,黄花菜都凉了。后来开始用GTM统一管理GA的追踪代码&#xff0c…

📰

first-contributions 实战:用 Git 三角工作流(Triangle Workflow)保持 Fork 与上游仓库同步

first-contributions 实战:用 Git 三角工作流(Triangle Workflow)保持 Fork 与上游仓库同步 【免费下载链接】first-contributions 🚀✨ Help beginners to contribute to open source projects 项目地址: https://gitcode.com/…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬