C++基础 — 函数总结
一、函数核心作用把一段重复、独立的逻辑封装起来一次定义、多处调用实现代码复用、逻辑分层、降低维护成本。C函数分为普通全局函数、类成员函数构造/析构/普通成员/静态成员/常函数、内联函数、模板函数、Lambda匿名函数。二、函数基础语法1. 完整结构// 返回值类型 函数名(参数列表) { 函数体; return 返回值; } int add(int a, int b) { return a b; }1. 返回值类型函数执行完返回的数据类型无返回写 void2. 函数名标识符见名知意不能是关键字3. 参数列表0个/多个逗号分隔形参定义处、实参调用处4. 函数体大括号内执行逻辑5. return终止函数带回返回值void函数可省略 return2. 无参、无返回示例void printHello() { std::cout Hello C std::endl; } // 调用 printHello();3. 有参有返回double mul(double x, double y) { return x * y; } double res mul(3.14, 2);三、函数声明 vs 函数定义对应.h/.cpp1. 声明只告诉编译器函数长什么样无实现放在头文件 .h作用提前告知接口解决“调用在定义前”报错。语法末尾加分号。// 声明 int add(int a, int b);2. 定义完整实现逻辑放在 .cpp只能定义一次。int add(int a, int b) { return a b; }工程规范.h放函数声明.cpp#include 对应头文件写函数实现四、函数参数四大传递方式1. 值传递拷贝最常用实参拷贝一份给形参函数内修改形参不影响外部变量。void test(int x) { x 100; // 只改副本 } int a 10; test(a); // a 依旧是 10缺点大对象string、类拷贝开销大。2. 引用传递 常引用/const1普通引用 T形参是实参别名修改形参直接改外部变量无拷贝开销。void modify(int x) { x 999; } int num 10; modify(num); // num 9992const 常引用 const T最优传参只读取、不修改无拷贝、不能改原数据传递字符串/类首选。void showStr(const std::string s) { std::cout s; // s xxx; // 报错const 不可修改 }3. 指针传递 T*传递变量地址通过解引用修改原值兼容C语言。void setVal(int* p) { *p 666; } int n 1; setVal(n);4. 数组参数数组传参等价于指针会丢失长度需额外传大小。void printArr(int arr[], int len) { for (int i 0; i len; i) std::cout arr[i]; }五、默认参数定义函数时给参数预设值调用不传则使用默认值。规则带默认值的参数必须靠右。// 正确默认参数放后面 void func(int a, int b 10, double c 3.14) {} // 调用多种写法 func(1); // b10, c3.14 func(1, 20); // c3.14 func(1, 20, 9.9); // 错误默认参数不能靠左 // void func(int a 10, int b) // 编译报错注意声明和定义只能一处写默认值推荐写在 .h 声明里。六、函数重载 Overload同一作用域函数名相同参数列表不同个数/类型/顺序编译器自动匹配对应函数。返回值不能作为重载区分依据。// 重载1 int calc(int a) { return a; } // 重载2 int calc(int a, int b) { return a b; } // 重载3 double calc(double a) { return a * 2; } calc(10); // 调用重载1 calc(1, 2); // 调用重载2 calc(2.5); // 调用重载3Qt 中大量使用重载按钮点击、控件构造。七、特殊函数类内成员函数1. 构造函数 Constructor函数名类名无返回值可重载。创建对象自动调用用于初始化成员变量。class Person { public: Person() { // 无参构造 age 0; } Person(int a) { // 有参构造重载 age a; } private: int age; }; Person p1; // 调用无参构造 Person p2(18); // 调用有参构造2. 析构函数 Destructor ~类名()如~MainWindow()波浪号~类名无参数、无返回、只能一个。对象销毁时自动调用释放堆内存、资源、句柄。class MainWindow { public: MainWindow(); ~MainWindow(); // 析构 };3. 常成员函数 const函数末尾加 const函数内不能修改成员变量只能读取。class Test { public: int getNum() const { // num 10; // 报错 return num; } private: int num 5; };4. 静态成员函数 static属于类不属于单个对象只能访问静态成员没有 this 指针。class Math { public: static int max(int a, int b) { return a b ? a : b; } }; // 直接类名调用不用创建对象 Math::max(3, 9);八、内联函数 inline普通函数调用有压栈跳转开销inline 提示编译器将函数代码直接嵌入调用处省去调用开销。适用代码很短1~5行、频繁调用的函数。inline int square(int x) { return x * x; }模板函数默认隐式 inline必须写在头文件。九、模板函数 template通用函数适配任意数据类型解决重复写 int/double/string 同款逻辑。templatetypename T T add(T a, T b) { return a b; } addint(1, 2); // 返回 3 adddouble(1.1, 2.2); // 返回 3.3强制放 .h 头文件编译器需要完整定义才能实例化。十、Lambda 匿名函数 C11不用定义函数名临时写一段逻辑常用于 Qt 信号槽、排序、遍历。auto func [](int x) - int { return x * 2; }; std::cout func(5); // 输出 10捕获列表 [][] 值捕获、[] 引用捕获外部变量。十一、函数递归函数内部自己调用自己必须有终止条件否则死循环栈溢出。// 阶乘 int fact(int n) { if (n 1) return 1; // 终止条件 return n * fact(n - 1); }十二、返回值补充1. void无返回可写 return; 提前退出2. 引用返回 int可以作为左值修改原变量3. 指针返回 int*返回堆地址记得外部释放4. 函数不能返回局部普通变量的引用/指针局部变量销毁悬空引用十三、常见易错点1. 函数声明加分号定义不能加分号2. 模板、inline 放头文件普通实现放 .cpp3. 重载只看参数返回值不算区分条件4. 默认参数从右往左写5. 传大型对象优先 const减少拷贝6. 析构函数不要手动调用对象销毁自动执行

相关新闻

C++20三向比较运算符实战指南:简化自定义类型比较逻辑

C++20三向比较运算符实战指南:简化自定义类型比较逻辑

1. 项目概述&#xff1a;为什么我们需要三向比较运算符&#xff1f;如果你写过C&#xff0c;尤其是写过自定义类型的比较逻辑&#xff0c;那你一定对重载operator<、operator这些函数感到熟悉又头疼。熟悉是因为这是基本功&#xff0c;头疼是因为太容易写错。你得小心翼翼地…

2026/10/19 12:36:51 阅读更多 →
三星 Galaxy Z Fold 8 发布:轻薄体验、设计升级,AI 功能待提升!

三星 Galaxy Z Fold 8 发布:轻薄体验、设计升级,AI 功能待提升!

三星 Galaxy Z Fold 8&#xff1a;全新折叠屏手机体验三星于 2026 年 7 月在伦敦的 Unpacked 活动上发布了多款新产品&#xff0c;其中全新的宽屏 Galaxy Z Fold 8备受期待。起初&#xff0c;看到泄露照片时&#xff0c;因其护照大小的外形在 2026 年并不常见&#xff0c;对其拿…

2026/10/20 9:59:25 阅读更多 →
如何做一次AI工作流诊断?6个问题找出系统真正卡点(附模板)

如何做一次AI工作流诊断?6个问题找出系统真正卡点(附模板)

一句话摘要&#xff1a;用Identity、Orchestration、Context、Gate、Recovery、Evolution六个维度&#xff0c;在30分钟内定位AI工作流的主要故障&#xff0c;并输出一张可验收的诊断结论卡。这是“一人公司AI内容生产系统”48篇系列的第14篇。 适合已经筛出真实求助&#xff0…

2026/10/18 2:44:23 阅读更多 →

最新新闻

WebSocket消息推送实战:从轮询到高并发长连接的全流程拆解

WebSocket消息推送实战:从轮询到高并发长连接的全流程拆解

接手过一个实时通知服务&#xff0c;业务上要求订单状态变更、客服会话、后台告警都要在秒级内推到用户端。最开始图省事用HTTP轮询&#xff0c;连接一多业务一复杂就明显顶不住——服务端压力大、客户端拿到的数据也不是实时的&#xff0c;高峰时段光无效请求就能把接口拖垮。…

2026/10/20 19:40:18 阅读更多 →
context-mode工程模式:从if-else泥潭到可维护的状态管理

context-mode工程模式:从if-else泥潭到可维护的状态管理

1. 从“上下文模式”这个命名说起&#xff1a;它到底在解决什么问题第一次看到“context-mode”这个词&#xff0c;很多人会下意识觉得它是个抽象概念&#xff0c;甚至怀疑它是不是又一个被过度包装的技术名词。但如果你真正在工程一线待过&#xff0c;尤其是在做对话系统、状态…

2026/10/20 19:40:18 阅读更多 →
select单线程高并发服务器:原理、实现与C代码实战

select单线程高并发服务器:原理、实现与C代码实战

你有没有算过这样一笔账&#xff1a;一个客户端占一个线程&#xff0c;一千个客户端就得开一千个线程&#xff0c;默认线程栈按 8MB 算&#xff0c;光栈空间就要 8GB。更不用说线程多了以后调度器在那边疯狂切换&#xff0c;锁竞争、死锁、共享数据打架&#xff0c;调一个并发 …

2026/10/20 19:40:18 阅读更多 →
AI教材写作如何降低查重率?从原理到实战的完整指南

AI教材写作如何降低查重率?从原理到实战的完整指南

上周&#xff0c;某高校教研组的A老师抱着一沓教材初稿找我&#xff0c;说AI生成的“专业基础课讲义”内容完整、目录清晰&#xff0c;结果一查重&#xff0c;直接超过40%。她说了一句让我印象极深的话&#xff1a;“我不理解&#xff0c;这些内容明明是我自己让AI按教材大纲写…

2026/10/20 19:40:18 阅读更多 →
MATLAB GUI定时器实战:用timer实现实时时钟与可重置倒计时

MATLAB GUI定时器实战:用timer实现实时时钟与可重置倒计时

简介&#xff1a;这是一份面向MATLAB GUI初学者的定时任务功能案例资源&#xff0c;针对需要掌握timer函数与TimerFcn回调机制、实现动态界面更新的开发者。资源包含两个可直接运行的Demo&#xff1a;第一个Demo每间隔1秒获取系统时间并在编辑框实时刷新&#xff1b;第二个Demo…

2026/10/20 19:40:18 阅读更多 →
MSA存储入门指南:从SAN协议到选型场景的全面解析

MSA存储入门指南:从SAN协议到选型场景的全面解析

简介&#xff1a;这份文档面向备考H3C认证工程师-MSA存储&#xff08;H3CNE-MSA&#xff09;的技术人员与H3C代理服务工程师&#xff0c;聚焦MSA存储设备基础配置与维护知识&#xff0c;帮助读者在有限时间内系统梳理考点、检验掌握程度。资源为1个docx文件&#xff0c;压缩包约…

2026/10/20 19:39:14 阅读更多 →

日新闻

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

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

2026/10/20 1:01:30 阅读更多 →
ESP32舵机控制指南:原理、多路驱动与避坑实战

ESP32舵机控制指南:原理、多路驱动与避坑实战

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

2026/10/20 1:01:30 阅读更多 →
位移法实现一阶低通滤波:单片机ADC采样降噪实战

位移法实现一阶低通滤波:单片机ADC采样降噪实战

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

2026/10/20 1:01:30 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型&#xff08;GMM&#xff09;的语音识别系统&#xff0c;很多人第一反应就是一堆数学公式&#xff0c;觉得门槛很高。但如果你真的在MATLAB里把它落地跑通&#xff0c;会发现核心其实就是三件事&#xff1a;把声音变成特征向量&#xff0c;用GMM给每个类别…

2026/10/20 10:02:13 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人&#xff0c;但落到具体操作上&#xff0c;无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程&#xff1a;对图像做反白、改调色板、彩色转灰度&#xff0c;最后把像素数据导出成txt文件。单看每一…

2026/10/19 17:32:41 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词&#xff0c;你会发现一个很有意思的现象&#xff1a;每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型&#xff0c;有人指的是运动控制系统&#xff0c;还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/20 2:50:50 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

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

2026/10/20 10:02:08 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

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

2026/10/20 9:50:17 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

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

2026/10/20 9:50:45 阅读更多 →