C++核心指导原则: 源文件

devtools/2025/3/1 12:42:04/

C++ Core Guidelines 整理目录

  1. 哲学部分
  2. 接口(Interface)部分
  3. 函数部分
  4. 类和类层次结构部分
  5. 枚举部分
  6. 资源管理部分
  7. 表达式和语句部分
  8. 性能部分
  9. 并发和并行
  10. 错误处理
  11. 常量和不可变性
  12. 泛型编程
  13. 源文件

源文件规则

SF.1: Use a .cpp suffix for code files and .h for interface files if your project doesn’t already follow another convention

  • 翻译: 使用.cpp为代码文件命名, 使用.h为接口文件命名(如果项目没有遵循其他约定)
  • 原因: 保持文件命名一致性有助于提高代码可读性和维护性. 不同的后缀可以帮助快速区分实现文件和接口文件.

SF.2: A header file must not contain object definitions or non-inline function definitions

  • 翻译: 头文件中不应包含对象定义或非内联函数定义
  • 原因: 避免在多个源文件中包含相同的定义导致链接错误. 头文件应仅包含声明而非定义.

SF.3: Use header files for all declarations used in multiple source files

  • 翻译: 在多个源文件中使用的声明应放在头文件中
  • 原因: 头文件可以确保所有源文件都能访问到所需的声明, 避免重复定义和编译错误.

SF.4: Include header files before other declarations in a file

  • 翻译: 文件中应在其他声明之前包含头文件
  • 原因: 确保在使用任何类型或函数之前已经声明它们, 避免编译错误.

SF.5: A .cpp file must include the header file(s) that defines its interface

  • 翻译: .cpp 文件必须包含定义其接口的头文件
  • 原因: 这样可以确保所有的声明都已正确包含, 并且可以在编译时进行检查.

SF.6: Use using namespace directives for transition, for foundation libraries (such as std), or within a local scope (only)

  • 翻译: using namespace 指令应仅用于过渡, 基础库(如 std)或局部作用域中
  • 原因: 在全局作用域中使用using namespace可能导致名称冲突. 局部作用域中使用则更加安全.

SF.7: Don’t write using namespace at global scope in a header file

  • 翻译: 避免在头文件的全局作用域中使用 using namespace
  • 原因: 全局作用域中的 using namespace 会影响所有包含该头文件的文件, 增加名称冲突的风险.

SF.8: Use #include guards for all header files

  • 翻译: 所有头文件应使用 #include 保护
  • 原因: 防止多次包含同一个头文件导致的重复定义问题.

SF.9: Avoid cyclic dependencies among source files

  • 翻译: 避免源文件之间的循环依赖关系
  • 原因: 循环依赖会导致编译错误或难以维护的代码结构.

SF.10: Avoid dependencies on implicitly #included names

  • 翻译: 避免依赖于隐式包含的名字
  • 原因: 明确列出所有需要的头文件, 确保代码清晰并减少潜在的编译问题.

SF.11: Header files should be self-contained

  • 翻译: 头文件应该是自包含的
  • 原因: 自包含的头文件可以独立编译, 便于管理和重用.

SF.12: Prefer the quoted form of #include for files relative to the including file and the angle bracket form everywhere else

  • 翻译: 相对包含文件使用引号形式的 #include, 对于其他地方则使用尖括号形式
  • 原因: 引号形式用于本地文件, 尖括号形式用于系统或第三方库文件, 有助于区分和管理.

SF.13: Use portable header identifiers in #include statements

  • 翻译: 在 #include 语句中使用可移植的头文件标识符
  • 原因: 提高代码的可移植性, 使其能在不同平台上正常工作.

SF.20: Use namespaces to express logical structure

  • 翻译: 使用命名空间来表达逻辑结构
  • 原因: 命名空间有助于避免名称冲突, 使代码结构更清晰.

SF.21: Don’t use an unnamed (anonymous) namespace in a header

  • 翻译: 不要在头文件中使用未命名(匿名)的命名空间
  • 原因: 匿名命名空间的内容在每个翻译单元中都是唯一的, 这可能会导致不必要的复杂性和潜在的编译问题.

SF.22: Use an unnamed (anonymous) namespace for all internal/non-exported entities

  • 翻译: 对所有内部/非导出实体使用未命名(匿名)的命名空间
  • 原因: 匿名命名空间可以使内部使用的符号具有内部链接属性, 避免与其他翻译单元中的同名符号冲突.

http://www.ppmy.cn/devtools/163619.html

相关文章

微信小程序自定义导航栏,胶囊菜单按钮高度适配问题

抽离公共方法用条件编译对微信小程序&#xff0c;抖音小程序适配 公共组件模块建立一个导航模块 <template><view class"layout"><view class"navbar" ><view class"statusBar" :style"{height:getStatusBarHeight()p…

微信小程序记录用户在图书详情页面停留时间--即阅读时间,如果超过两小时,则每小时提醒用户一次

在微信小程序中记录用户在图书详情页面的停留时间&#xff0c;并根据条件&#xff08;如超过两小时&#xff09;进行提醒&#xff0c;可以通过以下步骤实现。以下是详细的实现方案&#xff1a; 1. 实现思路 记录进入页面的时间&#xff1a;当用户进入图书详情页面时&#xff0…

SpringSecurity踢出指定用户

SpringSecurity中可以使用 SessionRegistry 的实现类 SessionRegistryImpl 来获取session相关信息&#xff0c;可以通过这个实现类来踢出用户。 SpringSecurity配置 EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter {AutowiredISysUser…

MR30系列分布式I/O:高稳定与高精准赋能锂电池覆膜工艺革新

在新能源行业高速发展的背景下&#xff0c;锂电池生产工艺对自动化控制的精准性和可靠性提出了更高要求。作为锂电池生产中的关键环节&#xff0c;覆膜工艺直接关系到电池的绝缘性能、安全性及使用寿命。面对复杂的工艺控制需求&#xff0c;明达技术MR30系列分布式I/O模块凭借其…

【Groovy】流程控制

1 选择结构 Groovy 中选择结构主要包含 if -else、switch 语句&#xff0c;并且可以返回结果。 1.1 if-else def score 85 if (score > 90) {println("优秀") } else if (score > 80) {println("良好") } else if (score > 60) {println("…

【每日刷题】Day184

【每日刷题】Day184 &#x1f955;个人主页&#xff1a;开敲&#x1f349; &#x1f525;所属专栏&#xff1a;每日刷题&#x1f34d; &#x1f33c;文章目录&#x1f33c; 1. 1700. 无法吃午餐的学生数量 - 力扣&#xff08;LeetCode&#xff09; 2. 146. LRU 缓存 - 力扣&a…

SQL Server 视图的更新排查及清除缓存

目录 前言排查方向 前言 获取数据的时候&#xff0c;发现数据少了两个字段值&#xff0c;归根原因是Java中的实体类少写了两个&#xff0c;后续补充上就好了&#xff01; 但也正了解到视图中的刷新原理以及排查机制&#xff0c;如果确认是视图等引起&#xff0c;可结合如下文…

【MyBatis】核心配置文件详解

文章目录 MyBatis核心配置文件详解1.configuration&#xff1a;2.environments&#xff1a;3.environmen&#xff1a;4.transactionManager&#xff1a;5.dataSource&#xff1a;5.1 UNPOOLED&#xff1a;5.2 POOLED&#xff1a;5.3 JNDI&#xff1a; 6. properties7. mapper M…