「C/C++」C/C++程序设计
文章平均质量分 93
重新系统学习C/C++,深度了解C语言面向过程编程设计和C++面向对象编程设计的知识点。
何曾参静谧
输入输出,循环迭代 ---- 大道至简
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
「C/C++」C++封装篇 之 Impl 类声明的位置 封装边界和编译依赖的区别
本文对比了C++中Pimpl惯用法的两种实现方案。方案一将Impl类声明为全局类,优点是允许外部前向声明和实现切换,但存在命名污染和导出问题;方案二采用私有嵌套类,完美封装实现细节,减少编译依赖,是更推荐的做法。文章通过表格对比了两者的特性差异,并提供了典型实现示例,建议优先选择方案二,仅在需要共享实现或动态切换等特殊场景才考虑方案一。原创 2026-04-06 09:31:42 · 427 阅读 · 0 评论 -
「C/C++」C/C++经验篇 之 `throw` 后面可以跟以下几种内容
throw。原创 2026-03-18 08:47:19 · 337 阅读 · 0 评论 -
「C/C++」C++17 之 std::any 详细介绍
std::any 是 C++17 引入的类型安全容器,可存储任意类型的单个值,替代不安全的 void*。摘要如下: 基本使用:支持多种初始化方式(直接赋值、make_any、in_place_type构造),通过any_cast安全访问值(返回指针或抛出异常)。 核心功能: has_value()检查是否含值 type()获取类型信息 reset()清空内容 emplace()就地构造新值 swap()交换内容 应用场景: 存储异构数据(如vector<any>混合容器) 实现类型擦除的通用编程原创 2026-03-17 16:21:50 · 390 阅读 · 0 评论 -
「C/C++」经验篇 之 头文件后缀 .h 和 .hpp 区别
后缀主要取决于项目风格、团队约定和个人偏好。这两种后缀在技术功能上是完全相同的,预处理器处理。,不要混用两种后缀。建议在项目开始时确定约定,并写入代码规范文档。越来越流行,因为它清晰地表明了文件的C++特性。的第三方库(如Boost),保持一致使用。如果主要与C库交互,使用。时只关心文件内容,不关心后缀名。比具体选择哪种后缀更重要。在现代纯C++项目中,原创 2026-03-07 20:03:46 · 442 阅读 · 0 评论 -
「C/C++」经验篇 之 C++ 参数初始化对比
不过,如果你的团队已经有固定的编码规范,保持一致性比哪种风格更重要。在实际项目中,两种写法都能正常工作,只是现代 C++ 倾向于使用统一初始化语法。原创 2026-03-03 14:07:30 · 634 阅读 · 0 评论 -
「C/C++」C/C++ 经验篇 之 开发自检表
本文整理了C++开发的35项关键自检要点,涵盖数值运算、内存管理、代码质量、性能优化、STL使用、并发编程、错误处理等方面。重点包括:浮点数比较需用epsilon公差、RAII资源管理原则、容器访问边界检查、函数单一职责拆分、移动语义应用、线程安全同步、异常安全保证等现代C++开发规范。通过这份自检表,开发者可以系统性地检查代码质量,避免常见陷阱,提升程序的健壮性和可维护性。完整内容可访问作者博客获取更多技术专栏资源。原创 2026-03-01 22:09:49 · 854 阅读 · 0 评论 -
「C/C++」经验篇 之 头文件引用详解
本文深入解析C++头文件引用最佳实践:1)优先使用前置声明减少依赖;2)遵循最小包含原则;3)确保头文件自包含性;4)采用#ifndef或#pragma once保护机制;5)规范头文件包含顺序;6)通过前置声明避免循环包含;7)对模板实现特殊处理。这些原则能提升编译效率、降低耦合度,是构建高质量C++项目的关键基础。原创 2025-10-31 09:50:02 · 1057 阅读 · 0 评论 -
「C/C++」番外篇 之 CMakeLists常用构建目录结构
本文介绍了两种CMakeLists常用构建目录结构方案:1)经典分层结构,包含分层清晰的include、src、tests等目录,推荐使用;2)按模块分组结构,以功能模块为单位组织代码。两种方案均遵循模块化设计原则,适用于C/C++项目构建。博客作者何曾参静谧还提供了多个技术专栏链接,涵盖Windows程序开发、C/C++、算法、Python等方向。文章配有动态分割线图片,风格简洁实用。原创 2025-09-24 21:32:10 · 252 阅读 · 0 评论 -
「C/C++」C/C++经验篇 之 pch.h 预编译头
pch.h作为预编译头文件,能够显著提升大型C++项目的编译效率。它通过预先编译常用头文件(如STL、第三方库和项目公共头文件),避免重复解析,使编译速度提升50-90%。使用时需将pch.h作为源文件的首个包含项,并注意仅包含稳定、通用的内容。现代构建工具如CMake和VS都提供预编译头支持,合理配置可大幅优化开发体验。原创 2025-09-11 17:51:36 · 1125 阅读 · 0 评论 -
「C/C++」C/C++经验篇 之 头文件预编译头 vs 直接包含
本文对比分析了C++项目中预编译头(PCH)与直接包含两种头文件管理策略的优劣,并给出推荐方案。预编译头适合包含稳定标准库、第三方库和项目基础头文件,能显著提升编译速度;直接包含则适用于业务特定和频繁变化的头文件,保持灵活性。建议采用混合策略:在预编译头中放入稳定内容,业务头文件直接包含,并按模块组织包含顺序。这种方案在大型项目中能平衡编译性能和维护性。原创 2025-09-11 17:18:21 · 1318 阅读 · 0 评论 -
「C/C++」C/C++经验篇 之 引用头文件放头文件和源文件中好
本文介绍了C/C++头文件包含的最佳实践,核心原则是最小化头文件依赖。主要内容包括: 必须放在头文件的情况:继承、组合(成员对象)、函数参数/返回值中使用具体类。 优先放源文件的情况:使用指针/引用时采用前向声明,在实现文件中包含对应头文件。 优势分析:减少编译时间、降低耦合度、避免循环引用。 通过遵循"最小依赖原则",可以显著提升编译效率和代码模块化程度。建议开发者优先使用前向声明,仅在必要时才在头文件中包含其他头文件。原创 2025-08-30 17:22:26 · 1366 阅读 · 0 评论 -
「C/C++」C/C++番外篇 之 计算机加密算法
加密大量数据:首选AES(256位),资源受限或无AES硬件加速时考虑ChaCha20。数字证书/密钥交换:首选ECC(更高效),兼容性要求高时用RSA(2048位以上)。追求前向保密必须使用ECDH或DHE。数据完整性/密码存储:首选SHA-256或SHA-512。绝对避免使用MD5和SHA-1。总体趋势ECC正在取代RSASHA-3作为SHA-2的下一代补充,AES在对称加密领域保持统治地位。身份认证与密钥交换网站服务器将其RSA或ECC证书(包含公钥)发送给浏览器。浏览器验证证书真实性。原创 2025-08-21 09:58:59 · 1330 阅读 · 0 评论 -
「C/C++」C/C++编译篇 之 C++编译器字符集深度解析:Unicode与多字节字符集的全面对比
字符集(Character Set)是字符与数字编码的映射关系系统,它定义了计算机如何表示和存储文本数据。C++编译器处理字符集的方式直接影响程序的国际化支持能力。在C++开发中,理解字符集差异对构建国际化应用至关重要。统一使用UTF-8编码设置正确的编译器选项避免混合使用不同编码对文本处理使用现代C++特性多字节字符集仍存在于遗留系统中,但Unicode(特别是UTF-8)已成为现代C++开发的事实标准。正确理解和应用这些知识,可以避免大多数国际化文本处理问题。何曾参静谧的博客。原创 2025-08-06 11:05:49 · 968 阅读 · 0 评论 -
「C/C++」C/C++经验篇 之 头文件与源文件:同文件夹 vs 分文件夹存放之争
C++项目头文件(.h/.hpp)与源文件(.cpp)的组织方式主要有两种:同文件夹存放和分文件夹存放。同文件夹结构适合小型项目,开发便捷、维护直观,但难以适应大型项目;分文件夹结构(include/src分离)则更适合中大型项目,能清晰隔离接口与实现,便于库文件制作。实际选择需考量项目规模、团队人数、构建复杂度等因素。知名项目如Google Test采用同文件夹,而Boost、LLVM等则采用分文件夹。建议初创项目从同文件夹开始,当出现头文件被外部引用、目录文件过多等信号时再考虑拆分,或采用模块化混合方案原创 2025-08-05 21:54:33 · 1254 阅读 · 0 评论 -
「C/C++」C/C++编译篇 之 Debug和Release编译模式的区别
通过合理选择编译模式,可以在开发效率和运行性能之间取得最佳平衡。Release优化后可能直接计算为499500(等差数列求和)重新组织代码,使频繁执行的分支路径更高效。重新排列指令以更好地利用CPU流水线。原创 2025-08-05 11:48:14 · 1253 阅读 · 0 评论 -
「C/C++」C/C++经验篇之 使用宏来控制代码不同版本编译
本文介绍了在C/C++中使用宏控制不同版本代码编译的方法。主要内容包括:1)通过#define定义宏(如NXCOPY 75);2)使用#if、#ifdef等预处理指令实现条件编译;3)实际应用示例展示功能开关和平台特定代码的实现;4)宏定义的三种常见来源;5)最佳实践建议,如添加前缀、集中管理、文档化等。文章还提供了版本管理头文件的示例代码,帮助开发者有效管理多版本代码编译。完整内容可访问作者CSDN博客查看更多技术文章。原创 2025-08-05 09:29:50 · 589 阅读 · 0 评论 -
「C/C++」C/C++异常篇 之 何时抛出异常,何时避免异常
摘要: 本文探讨C++异常处理的最佳实践,分析何时应抛出异常(如不可恢复错误、构造函数失败、违反前置条件等)及何时应避免异常(如高频调用、析构函数、跨语言交互等)。文章建议优先使用标准异常类型(如std::runtime_error),在性能关键路径改用返回值或std::optional,并强调析构函数必须标记noexcept。通过合理使用异常机制,可提升代码健壮性,同时避免性能损耗与逻辑混乱。原创 2025-08-01 11:10:48 · 829 阅读 · 0 评论 -
「C/C++」C/C++番外篇 之 Clion中的CMakeLists.txt 介绍
CLion 中的 CMakeLists.txt 配置指南 CLion 原生支持 CMake,通过 CMakeLists.txt 管理 C/C++ 项目。基础配置包括: 项目定义:cmake_minimum_required 指定版本,project 设置项目名称和语言(C/C++)。 编译控制:set(CMAKE_CXX_STANDARD 17) 指定标准,add_compile_options 添加警告选项。 目标构建:add_executable 生成可执行文件,add_library 创建静态/动态库原创 2025-07-04 13:28:16 · 1061 阅读 · 0 评论 -
「C/C++」C/C++番外篇 之 程序员的两大核心思维(鸟瞰与虫视)
本文探讨了程序员必备的两种核心思维方式:自顶向下的全局观与自底向上的微观细节把控。全局观强调从系统架构、业务目标等宏观角度思考问题,而细节把控则关注代码质量、算法效率等微观层面。文章分析了两种思维的辩证关系,指出它们互为补充而非对立,并提供了培养这两种思维的方法与实践建议。通过行业案例说明,在复杂系统开发中,只有将宏观设计与微观实现有机结合,才能构建出高质量、可维护的软件系统。建议程序员在不同职业阶段有侧重地培养这两种能力,最终实现思维方式的平衡统一。原创 2025-06-27 10:59:23 · 1154 阅读 · 0 评论 -
「C/C++」C/C++经验篇 之 防止重复包含的#ifndef和#pragma once两种方法
定义基本正确,但按照现代C++项目规范,建议优先考虑使用。宏定义防止重复包含是一种经典方法,虽然现代更推荐使用。在C++头文件中使用。原创 2025-06-25 09:03:33 · 616 阅读 · 0 评论 -
「C/C++」C/C++经验篇 之 C++防御性编程原则
本文介绍了C++防御性编程的核心原则与实践方法,包括输入验证、资源管理、内存安全和异常处理等关键方面。主要内容涵盖:1)基本防御原则如输入验证和RAII资源管理;2)内存安全技术包括智能指针和边界检查;3)异常安全实现的三个级别(基本、强和不抛保证)及安全交换模式;4)类型安全实践如避免C风格转换和使用类型安全替代方案。这些技术有助于开发健壮、安全的C++代码,减少潜在错误和漏洞。原创 2025-06-24 16:19:52 · 1217 阅读 · 0 评论 -
「C/C++」C/C++经验篇 之 函数分装时错误处理的方法
在C++中处理错误信息的常见方法包括:1) 返回值/错误码(简单高效但信息有限);2) std::optional(清晰表达失败但无详情);3) 抛出异常(适合严重错误,可携带详细信息);4) 结构化错误(结合错误码和描述,需C++17);5) 日志记录(适用于调试)。选择方案需权衡性能、信息量和代码复杂度,建议简单错误用返回值/optional,关键错误用异常,复杂场景用结构化错误或日志。原创 2025-06-19 09:24:14 · 1163 阅读 · 0 评论 -
「C/C++」C++11 之 enum与enum class全面对比
C++11引入的enum class解决了传统enum的三大痛点:命名污染(枚举量泄漏到外层作用域)、隐式类型转换(自动转整型导致安全隐患)和底层类型不确定(影响跨平台兼容)。通过对比表格可见,enum class具有作用域限定、禁止隐式转换、支持类型指定等优势,特别适合需要强类型安全的场景。而传统enum仍适用于C兼容、标志位操作等简单用例。开发者应根据类型安全需求、代码维护性等因素合理选择,现代C++项目推荐优先采用enum class。原创 2025-06-05 11:33:24 · 1024 阅读 · 0 评论 -
「C/C++」C/C++编译篇 之 C++编译与链接机制深度解析
本文深度解析C++程序构建全流程,包含四个关键阶段:预处理(宏展开、头文件处理)、编译(词法/语法分析、优化)、汇编(生成目标文件)和链接(符号解析与重定位)。文章详细介绍了静态/动态链接区别、常见链接错误,以及C++特有的名称修饰、模板实例化等机制。同时提供现代构建实践(CMake、编译数据库)和调试技巧(nm/objdump工具使用),帮助开发者全面理解C++编译链接过程,掌握构建优化与问题排查方法。原创 2025-06-04 16:41:48 · 1180 阅读 · 0 评论 -
「C/C++」C/C++标准库 之 #include <tuple> 之 不同类型值打包模板类
本文全面介绍了C++中的std::tuple模板类。作为C++11引入的异构集合,tuple允许将固定数量、不同类型的值打包为单一对象。原创 2025-05-29 08:29:33 · 886 阅读 · 0 评论 -
「C/C++」C/C++经验篇 之 C++数据绑定技术解析
本文全面解析C++数据绑定技术,涵盖基础概念、实现方法和应用场景。原创 2025-05-28 11:12:10 · 1571 阅读 · 0 评论 -
「C/C++」C/C++经验篇 之 C++函数绑定技术解析
函数绑定(Function Binding)是C++中将函数调用与特定上下文或参数关联的技术,它允许我们将函数或成员函数与特定对象或参数值绑定,创建可调用对象以便后续使用。原创 2025-05-28 11:01:02 · 1149 阅读 · 0 评论 -
「C/C++」C++标准库 之 #include<fstream>文件流 ifstream 输入流详解
本文全面介绍了C++中的istream输入流类,包括其功能、使用方法和最佳实践。主要内容涵盖:1)istream类层次结构;2)基本输入操作(提取运算符、get()系列函数、getline()等);3)流状态处理;4)高级功能(格式化输入、自定义提取运算符);5)文件输入和字符串输入的具体应用;6)输入操作的最佳实践,如状态检查、换行符处理等。适合需要系统学习C++输入流操作的开发者参考。原创 2025-05-26 14:26:11 · 1587 阅读 · 0 评论 -
「C/C++」C/C++经验篇 之 C++动态模块接口调用设计
本文介绍了C++中实现动态模块接口调用的多种设计方案。主要包括三种核心方法:(1)基于抽象基类和工厂模式的面向对象实现;(2)使用std::function和std::map的函数指针方式;(3)通过动态库加载的插件架构。文章还详细探讨了控制模块调用的常见策略,如配置文件、运行时参数、条件逻辑和依赖注入。针对不同应用场景,作者给出了最佳实践建议,包括接口隔离、错误处理、性能优化和线程安全等关键考量因素,为C++开发者设计灵活可扩展的模块化系统提供了实用参考方案。原创 2025-05-26 10:23:12 · 1174 阅读 · 0 评论 -
「DSA」C++搜索算法 之 深度优先搜索(DFS)算法
深度优先搜索(DFS)是一种图遍历算法,以深度为优先策略,尽可能深入地探索图的分支。本文详细介绍了DFS的基本概念、C++实现及其应用。DFS通过递归或迭代方式实现,时间复杂度为O(V+E),空间复杂度为O(V)。文章提供了递归和迭代的C++代码示例,并探讨了DFS的变体,如拓扑排序和查找连通分量。DFS在有限状态空间中总能找到解,但不一定是最优解。通过本文,读者可以全面了解DFS的原理、实现方式及其在图算法中的应用。原创 2025-05-22 08:05:01 · 990 阅读 · 0 评论 -
「C/C++」C++ 标准库 之 #include<sstream>之 std::stringstream
需要混合输入输出的场景复杂字符串构建任务类型安全的字符串转换需要重用流对象的场景格式要求复杂的文本生成。原创 2025-05-17 08:36:35 · 1523 阅读 · 0 评论 -
「C/C++」C++ 标准库 之 #include<sstream>之 std::ostringstream
本文全面介绍了C++中的std::ostringstream类,这是一个用于在内存中构建和格式化字符串的强大工具。文章首先概述了std::ostringstream的核心特性,包括其作为内存中的输出流、继承自std::ostream、类型安全输出和灵活的格式控制等。接着,详细讲解了其基本用法,如创建对象、基本输出操作以及清空和重用方法。文章还深入探讨了高级格式化功能,包括数字格式化、对齐和填充,以及如何为自定义类型实现输出操作。原创 2025-05-17 08:27:52 · 1406 阅读 · 0 评论 -
「C/C++」C++ 标准库 之 #include<sstream> 之 std::istringstream
本文深入解析了C++中的std::istringstream类,介绍了其基本概念、主要用途及高效使用方法。std::istringstream允许将字符串作为输入流处理,支持类型安全的字符串到其他数据类型的转换。文章详细讲解了如何创建istringstream对象、基本读取操作、检查流状态等基础用法,并进一步探讨了字符串分割、处理多行文本、类型安全转换等高级用法。此外,还介绍了错误处理和验证的方法,包括完整数据验证和处理多种错误情况。原创 2025-05-17 08:19:35 · 1583 阅读 · 0 评论 -
「C/C++」C/C++经验篇 之 std::string 与 std::wstring 之间转换
本文介绍了两个通用的字符串转换函数,支持 std::string(UTF-8)和 std::wstring(UTF-16/UTF-32)之间的转换,适用于 Windows 和其他平台。第一个函数 StringToWide 将 UTF-8 编码的 std::string 转换为 std::wstring,第二个函数 WideToString 则将 std::wstring 转换回 UTF-8 编码的 std::string。文章还提供了测试用例,并详细说明了跨平台兼容性、编码假设以及替代方案。原创 2025-05-16 13:50:28 · 1617 阅读 · 0 评论 -
「C/C++」C/C++经验篇 之 std::string和std::wstring之间的区别
std::wstring 和 std::string 是 C++ 标准库中的两种字符串类型,主要区别在于字符类型和编码方式。std::string 基于 char,通常用于存储 ASCII 或 ANSI 编码的文本,而 std::wstring 基于 wchar_t,用于存储宽字符,通常表示 UTF-16(Windows)或 UTF-32(Unix-like)。std::string 适用于跨平台文本、网络传输和文件存储,而 std::wstring 在 Windows API 编程中更常见。原创 2025-05-16 09:31:17 · 1489 阅读 · 0 评论 -
「C/C++」C/C++经验篇 之 extern关键字
extern 是 C/C++ 中用于声明变量或函数具有外部链接的关键字,允许它们在不同源文件或编译单元之间共享。其主要作用包括声明全局变量或函数,避免重复定义导致的链接错误。extern 的基本用法包括修饰变量和函数,声明但不定义它们。此外,extern "C" 用于 C 和 C++ 混合编程,防止 C++ 编译器对函数名进行名称修饰。extern 与 static 的区别在于链接性,extern 具有外部链接,而 static 具有内部链接。原创 2025-05-11 20:31:54 · 1320 阅读 · 0 评论 -
「C/C++」C/C++经验篇 之 函数命名Ask和Get的使用情况分析
建议结合使用的具体三维内核(如OpenCASCADE、Parasolid等)的现有命名惯例。如果是NX二次开发,优先使用。在三维CAD/CAM/CAE软件开发中,函数命名使用。若是自主开发的几何内核,现代C++更倾向使用。取决于具体语义和行业惯例。原创 2025-04-23 12:19:32 · 894 阅读 · 0 评论 -
「C/C++」C/C++第三方库 之 OpenSSL加密算法库头文件介绍(二)
OpenSSL的头文件构成了其丰富的API接口,为开发者提供了加密、SSL/TLS协议实现、证书处理等功能的编程接口。下面我将分类介绍OpenSSL的主要头文件及其功能。原创 2025-04-22 15:40:19 · 1225 阅读 · 0 评论 -
「C/C++」C/C++第三方库 之 OpenSSL加密算法库介绍(一)
OpenSSL是业界领先的开源密码学工具包,提供了完整的SSL/TLS协议实现以及丰富的加密算法库。作为互联网安全的基石,它被广泛应用于Web服务器、VPN、电子邮件系统等各种需要安全通信的场景。原创 2025-04-22 15:37:04 · 1267 阅读 · 0 评论 -
「C/C++」C/C++经验篇 之 自由函数和类成员函数优先级
在C++开发中,决定将函数设计为自由函数(全局/命名空间函数)还是类成员函数,需要根据具体场景和设计原则来判断。以下是详细的对比和指导建议:适用场景:优点:示例:2. 使用类成员函数的场景适用场景:优点:示例:3. 关键决策依据选择自由函数的情况:函数是无状态的(纯函数)。函数需要支持多种类型(适合模板或重载)。函数是算法或工具,不专属于某个类(如STL中的)。选择成员函数的情况:函数直接操作类的私有数据。函数是类行为的核心部分(如)。需要多态行为(虚函数)。4. 现代原创 2025-04-21 15:44:10 · 1158 阅读 · 0 评论
分享