【算法课外作业】华为公司代码规范及《数学之美》读后感

一、华为公司代码规范

1.命名约定

  • 变量、函数等命名:应清晰、明了,有明确含义,避免使用单个字符(除了局部循环变量)或容易混淆的缩写。
  • 常量命名:应全部大写,单词间用下划线分隔。
  • 文件命名:C++文件以.cpp结尾,头文件以.h结尾,文件名和类名尽量保持一致。

2. 排版格式

  • 缩进:使用空格进行缩进,每次缩进4个空格,不使用TAB键。
  • 行宽:建议不超过120个字符,较长语句应提成多行书写。
  • 大括号:程序块分界符(如大括号)应各独占一行,并位于同一列。
  • 空格:在操作符两侧、逗号后、分号后等位置应添加空格以提高可读性

3. 注释风格

  • 文件头注释:必须包含版权许可、版本号、生成日期、作者等信息。
  • 函数头注释:列出函数的目的、功能、输入参数、输出参数、返回值等。
  • 代码注释:应放在对应代码的上方或右边,注释内容要清晰、明了,避免使用缩写。

4. 作用域管理

  • 命名空间:优先使用命名空间来管理全局函数、全局常量和全局变量。
  • 匿名命名空间:对于cpp文件中不需要导出的变量、常量或函数,应使用匿名命名空间封装或用static修饰。

static:

在 C 或 C++ 中,static 关键字可以用于全局变量、局部变量和函数,分别表示不同的意义。对于全局变量,它限制了变量的链接性(即,它只在其声明的文件内可见)。对于局部变量,它使得变量的生命周期延长至包含它的函数执行完毕之后,但仅在该函数的调用期间可见。对于函数,它使得函数只能在声明它的文件内可见。


ATTENTION:下面为未掌握知识


5. 头文件使用

  • 头文件职责:每个.cpp文件应有一个对应的.h文件,用于声明需要对外公开的类与接口。
  • 头文件依赖:禁止头文件循环依赖,头文件必须编写#define保护防止重复包含。

 头文件循环依赖(Circular Dependencies in Header Files)是指在软件开发中,特别是使用C或C++等语言时,两个或多个头文件之间存在相互依赖的情况。具体来说,这意味着文件A.h包含了文件B.h的声明或定义,而文件B.h又反过来包含了文件A.h的声明或定义,形成了一个闭环。这种相互依赖关系可能直接发生,也可能通过其他头文件间接发生。

头文件循环依赖会导致一系列问题,包括但不限于:

  1. 编译问题:当任何一个头文件被修改时,由于依赖关系,所有包含了这些头文件的源文件都需要重新编译,从而增加了编译时间和复杂度。
  2. 可读性和可维护性降低:随着项目规模的扩大,循环依赖会使代码结构变得复杂,降低代码的可读性和可维护性。
  3. 设计问题:循环依赖通常表明系统设计存在问题,可能是模块划分不清晰、职责分配不合理等原因造成的。

为了解决头文件循环依赖问题,可以采取以下几种策略:

  1. 重新设计组件:分析循环依赖的原因,重新设计组件的层次结构和职责划分,确保组件之间不会形成循环依赖。
  2. 使用前向声明:在头文件中使用前向声明(forward declaration)来替代包含对方的头文件。前向声明只需要声明类型而不需要包含头文件,从而可以避免循环依赖。
  3. 接口和实现分离:将类的接口(声明)和实现(定义)分开放在不同的头文件和源文件中。然后在需要的地方只包含接口的头文件,而不是实现的头文件。
  4. 使用指针或引用:在类的成员变量中使用指针或引用来引用对方的类,而不是直接包含对方的头文件。这样可以在不破坏封装性的前提下,降低类之间的耦合度。
  5. 依赖注入:在面向对象编程中,可以通过依赖注入的方式来降低类之间的耦合度,从而避免循环依赖。依赖注入允许在运行时将依赖项注入到对象中,而不是在编译时通过包含头文件来实现。

6. 类设计

  • 成员变量初始化:必须显式初始化,优先使用声明时初始化(C++11)和构造函数初始化列表初始化。
  • 拷贝构造和赋值操作符:如果不需要,请明确禁止。
  • 虚函数:禁止在构造函数和析构函数中调用虚函数。

7. 资源分配与释放

  • 智能指针:优先使用智能指针(如unique_ptrshared_ptr)而不是原始指针管理资源。
  • RAII:使用RAII特性来帮助追踪动态分配的资源。

8. 异常处理

  • 异常声明:如果函数不会抛出异常,应声明为noexcept

9. 现代C++特性

  • auto:合理使用auto来简化代码。
  • nullptr:使用nullptr代替NULL0
  • override和final:在重写虚函数时使用overridefinal关键字。

二、《数学之美》读后感

       读完第一章节,我意识到文字和语言正在有重大价值的并非其本身,而是蕴含于其中想表达的事件、观点。正如计算机学习过程中,每一行代码只是基层建设,最主要的还是整体代码所要解决的问题。同时,我也意识到,当代计算机的发展进步,有许多思路源自于文字和语言发展的历程,从祖先创造的二进制、十进制等沿用之今,从口语和书面语的复杂性区别反映到今日的信息科学与工程——通信,从犹太人用校验码核对誊抄准确性反映到今日计算机的各种校验,从语句文本出发反映为今日的自然语言处理,祖先的智慧结晶为今日计算机的发展奠定了厚实且宝贵的基础!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值