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/7/24 12:53:26 阅读更多 →
三星 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/7/24 12:53:26 阅读更多 →
如何做一次AI工作流诊断?6个问题找出系统真正卡点(附模板)

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

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

2026/7/24 12:52:26 阅读更多 →

最新新闻

TikTok 视频详细数据包含哪些内容?一篇文章全面了解

TikTok 视频详细数据包含哪些内容?一篇文章全面了解

很多人第一次接触 TikTok 数据时都会问&#xff1a; 一条视频到底有哪些可以分析的数据&#xff1f; 实际上&#xff0c;远比想象中丰富。 一条 TikTok 视频通常包含哪些信息&#xff1f; 常见字段包括&#xff1a; 基础信息 Video ID视频链接发布时间视频标题视频描述视…

2026/7/24 13:01:29 阅读更多 →
Docker Compose 核心价值与实战配置详解

Docker Compose 核心价值与实战配置详解

1. Docker Compose 核心价值解析在容器化技术普及的今天&#xff0c;单容器部署早已不能满足实际业务需求。我经历过数十次从单容器到多容器系统的迁移过程&#xff0c;Docker Compose 的价值在于用声明式配置解决容器编排的"最后一公里"问题。通过一个简单的 docker…

2026/7/24 13:01:29 阅读更多 →
语法不报错≠迁移成功|拆解传统数据库迁KES的六大隐性SQL逻辑陷阱

语法不报错≠迁移成功|拆解传统数据库迁KES的六大隐性SQL逻辑陷阱

一、前言 SQL标准只是一个框架性规范&#xff0c;很多细节行为并没有做强制规定&#xff0c;各家数据库厂商都有自己的实现逻辑和扩展特性。传统商用数据库比如Oracle、开源数据库比如MySQL&#xff0c;都发展了二三十年&#xff0c;为了兼容历史版本、降低用户使用门槛&#x…

2026/7/24 13:01:29 阅读更多 →
.NET现代化构建方案:容器化与增量编译实战

.NET现代化构建方案:容器化与增量编译实战

1. 项目背景与核心价值十年前我第一次接触.NET项目时&#xff0c;MSBuild的复杂配置让我在团队构建流程上耗费了整整两周时间。如今看到微软最新推出的.NET构建工具链革新方案&#xff0c;不禁感慨技术演进的惊人速度。这次我们要深入探讨的&#xff0c;正是当前.NET生态中最具…

2026/7/24 13:01:28 阅读更多 →
巴斯吸尘器深度评测:16000Pa超强吸力,车载家用全能清洁利器

巴斯吸尘器深度评测:16000Pa超强吸力,车载家用全能清洁利器

巴斯吸尘器深度体验&#xff1a;车载家用全能清洁利器&#xff0c;16000Pa超强吸力实测 在日常清洁工作中&#xff0c;无论是家庭大扫除还是车内细节清理&#xff0c;一款性能出色的吸尘器能极大提升效率。最近体验了巴斯品牌的无线吸尘器&#xff0c;其16000Pa超强吸力、紫外线…

2026/7/24 13:01:28 阅读更多 →
AI 编程伦理与安全:使用 AI 写代码前必须知道的五个原则

AI 编程伦理与安全:使用 AI 写代码前必须知道的五个原则

AI 编程伦理与安全&#xff1a;使用 AI 写代码前必须知道的五个原则前言&#xff1a;一个令人警醒的真实故事 2023年&#xff0c;三星电子发生了一件让整个科技行业警醒的事。三位工程师在使用 ChatGPT 辅助工作时&#xff0c;将公司内部的源代码粘贴到了 ChatGPT 的对话中——…

2026/7/24 13:00:28 阅读更多 →

日新闻

用Highcharts 创建可拖拽三维散点立方体3D图表

用Highcharts 创建可拖拽三维散点立方体3D图表

该案例基于Highcharts scatter3d 三维散点图实现空间立方体散点可视化&#xff0c;核心特色&#xff1a;三维 X/Y/Z 三轴空间&#xff0c;所有散点分布在 0~10 立方体空间内&#xff1b;散点使用径向渐变实现立体 3D 圆球质感&#xff1b;支持鼠标 / 触屏拖拽画布&#xff0c;…

2026/7/24 0:00:29 阅读更多 →
AppCertDlls:进程创建路径上的 DLL 入口

AppCertDlls:进程创建路径上的 DLL 入口

AppCertDlls&#xff1a;进程创建路径上的 DLL 入口 AppCertDlls 位于 HKLM\System\CurrentControlSet\Control\Session Manager\AppCertDlls。本文的程序功能是只读列出这个键在 64 位和 32 位注册表视图中的全部值&#xff0c;并显示每条值的来源、名称、类型和可安全显示的数…

2026/7/24 0:00:29 阅读更多 →
我的编程之路:第一篇博客

我的编程之路:第一篇博客

大家好&#xff0c;我是一名编程初学者&#xff0c;同时这也是我编程学习之路上的第一篇博客。在这里&#xff0c;我想要向大家介绍我的一些想法和规划。a.自我介绍我是一个刚刚接触编程的新手&#xff0c;目前在学习c语言&#xff0c;我对编程世界充满了强烈的好奇。当然&…

2026/7/24 0:00:29 阅读更多 →

周新闻

Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中&#xff0c;我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源&#xff0c;还是配置文件、证书等&#xff0c;都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下&#xff0c;但这…

2026/7/24 3:59:20 阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP&#xff08;轻量级目录访问协议&#xff09;作为企业级身份认证的黄金标准&#xff0c;已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时&#xff0c;发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/24 1:23:39 阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”&#xff0c;而是以可解释、可审计、可迭代的方式&#xff0c;赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/23 17:49:47 阅读更多 →

月新闻