【C++】Google编码风格学习

Google规范线上地址:https://zh-google-styleguide.readthedocs.io/en/latest/

文章目录

    • 1. 头文件
    • 2. 作用域
    • 3. 类
    • 4. 函数
    • 5. 其他C++特性
    • 6. 命名约定
    • 7. 注释
    • 8. 格式

1. 头文件

每个cpp/cc文件都对应一个h头文件,除单元测试代码和只包含main()的文件外。

所有头文件都应该有 #define 保护来防止头文件被多重包含,命名格式:<PROJECT>_<PATH>_<FILE>_H_,如:

#ifndef FOO_BAR_BAZ_H_
#define FOO_BAR_BAZ_H_
...
#endif // FOO_BAR_BAZ_H_

当函数被声明为内联函数后,编译器会将其内联展开,而不是按通常的函数调用机制进行调用。(注意:只有当函数只有 10 行或者更少时才将其定义为内联函数)

使用标准的头文件包含顺序可增强可读性,避免隐藏依赖,顺序如下:相关头文件, C 库, C++ 库,其他库的.h,本项目内的.h

2. 作用域

命名空间将全局作用域细分为独立的,具名的作用域,可有效防止全局作用域的命名冲突。另外,一般在命名空间的最后注释出命名空间的名字。

3. 类

类是 C++ 中代码的基本单元。

在构造函数中可以进行各种初始化操作。

仅当只有数据成员时使用 struct,其它一概使用 class

接口是指满足特定条件的类,这些类以 Interface 为后缀 (不强制)。

4. 函数

函数使用时倾向于按值返回,否则按引用返回。避免返回指针,除非它可以为空。

函数最好简短、凝练,避免拖长尾。

所有按引用传递的参数必须加上const

若要使用函数重载,则必须能让读者一看调用点就胸有成竹,而不用花心思猜测调用的重载函数到底是哪一种,这一规则也适用于构造函数。

5. 其他C++特性

禁止使用 C++ 异常。

使用 C++ 的类型转换,如 static_cast<>()。不要使用 int y = (int)x 或 int y = int(x) 等转换方式。

强烈建议你在任何可能的情况下都要使用 const. 此外有时改用 C++11 推出的 constexpr 更好。

C++ 没有指定整型的大小。通常人们假定 short 是16位,int是32位,long是32位,long long是64位。

适当使用 lambda 表达式。别用默认 lambda 捕获,所有捕获都要显式写出来。

只使用 Boost 中被认可的库。

6. 命名约定

函数命名,变量命名,文件命名要有描述性,少用缩写。

文件名要全部小写,可以包含下划线(_)或连字符(-),依照项目的约定,如果没有约定,那么“”更好。

7. 注释

使用///**/,统一就好。

函数声明处的注释描述函数功能,定义处的注释描述函数实现。

函数的输入输出。
对类成员函数而言: 函数调用期间对象是否需要保持引用参数, 是否会释放这些参数。
函数是否分配了必须由调用者释放的空间。
参数是否可以为空指针。
是否存在函数使用上的性能隐患。
如果函数是可重入的, 其同步前提是什么?

通常变量名本身足以很好说明变量用途。某些情况下,也需要额外的注释说明。

8. 格式

每一行代码字符数不超过80。

尽量不使用非 ASCII 字符,使用时必须使用UTF-8编码。

只使用空格,每次缩进2个空格。

倾向于不在圆括号内使用空格,关键字 ifelse 另起一行。

switch 语句可以使用大括号分段,以表明 cases 之间不是连在一起的。在单语句循环里,括号可用可不用。空循环体应使用{}或 continue

在这里插入图片描述

最后,请注意项目整体代码风格尽量保持一致,这样可以把精力集中在实现内容而不是表现形式上。

以上。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/1960.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

100天精通Python(可视化篇)——第80天:matplotlib绘制不同种类炫酷柱状图代码实战(簇状、堆积、横向、百分比、3D柱状图)

文章目录0. 专栏导读1. 普通柱状图2. 簇状柱形图3. 堆积柱形图4. 横向柱状图5. 横向双向柱状图6. 百分比堆积柱形图7. 3D柱形图8. 3D堆积柱形图9. 3D百分比堆积柱形图0. 专栏导读 &#x1f3c6;&#x1f3c6;作者介绍&#xff1a;Python领域优质创作者、CSDN/华为云/阿里云/掘金…

Python读写EXCEL文件常用方法大全

python读写excel的方式有很多&#xff0c;不同的模块在读写的讲法上稍有区别&#xff0c;这里我主要介绍几个常用的方式。 用xlrd和xlwt进行excel读写&#xff1b;用openpyxl进行excel读写&#xff1b;用pandas进行excel读写&#xff1b; 一、数据准备 为了方便演示&#xff…

基于深度学习的动物识别系统(YOLOv5清新界面版,Python代码)

摘要&#xff1a;动物识别系统用于识别和统计常见动物数量&#xff0c;通过深度学习技术检测日常几种动物图像识别&#xff0c;支持图片、视频和摄像头画面等形式。在介绍算法原理的同时&#xff0c;给出Python的实现代码、训练数据集以及PyQt的UI界面。动物识别系统主要用于常…

C++ , STL常用容器

STLSTL初识STL的诞生STL基本概念STL六大组件STL中的容器、算法、迭代器容器算法迭代器初识STL — 常用容器string容器vector容器deque容器stack容器queue容器list容器set/ multiset 容器map/ multimap 容器C 模板. STL初识 STL的诞生 长久以来&#xff0c;软件界一直希望建立…

最好用的Markdown编辑器:MWeb Pro mac

MWeb pro Mac中文版是一款非常好用的Markdown编辑器和博客生成工具&#xff0c;支持语法高亮&#xff0c;预览&#xff0c;Fenced code blocks和代码高亮&#xff0c;Math ML支持&#xff0c;具有导出HTML/PDF&#xff0c;自定编辑器主题&#xff0c;字数统计&#xff0c;大纲视…

DRAM功能介绍与基础概念

目录 ROM与RAM DRAM定义与形态 DRAM存储单元 DRAM架构和工作流程 存储器是计算机系统中的记忆设备&#xff0c;用来存储程序和各种数据信息&#xff0c;存储器的存储介质主要采用半导体器件和磁性材料。接下来简单介绍存储器的主要分类。 按存储介质可以分类为半导体存储器…

2023年Android现代开发

2023年现代Android开发 下面与大家分享如何构建具有2023年最新趋势的Android应用程序。 Android是什么&#xff1f; Android 是一种基于 Linux 内核并由 Google 开发的开源操作系统。它用于各种设备&#xff0c;包括智能手机、平板电脑、电视和智能手表。 目前&#xff0c…

JVM-栈详解二

前言 虚拟机栈概述 虚拟机栈出现的背景 由于跨平台性的设计&#xff0c;Java的指令都是根据栈来设计的。不同平台CPU架构不同&#xff0c;所以不能设计为基于寄存器的。 优点是跨平台&#xff0c;指令集小&#xff0c;编译器容易实现&#xff0c;缺点是性能下降&#xff0c;实…

【Java项目】完善基于Java+MySQL+Tomcat+maven+Servlet的博客系统

目录一、准备工作二、引入依赖三、创建必要的目录四、编写代码五/六、打包部署(直接基于 smart tomcat)七、验证代码正式编写服务器代码编写数据库相关的操作代码创建数据库/表结构(数据库设计)数据库代码封装数据库操作封装针对数据的增删改查&#xff01;博客列表页约定前后端…

【论文阅读总结】用于目标检测的特征金字塔网络(FPN)

Feature Pyramid Networks for Object Detection1.摘要2.引言2.1 低级特征对于检测小物体很重要2.2 算法目标3. 文献综述3.1 Hand-engineered features and early neural networks3.2 Deep ConvNet object detectors3.3 Methods using multiple layers4.Feature Pyramid Networ…

嵌入式:BSP的理解

BSP概念总结BSP定义BSP的特点BSP的主要工作BSP在嵌入式系统和Windowsx系统中的不同BSP和PC机主板上的BIOS区别BSP与 HAL关系嵌入式计算机系统主要由 硬件层&#xff0c;中间层&#xff0c;系统软件层和应用软件层四层组成。硬件层&#xff1a;包含CPU&#xff0c;存储器(SDRAM&…

Mybatis(一):环境搭建

Mybatis&#xff08;一&#xff09;&#xff1a;环境搭建前言一、MyBatis简介1、MyBatis历史2、MyBatis特性3、MyBatis下载4、和其它持久化层技术对比二、搭建MyBatis1、开发环境2、创建maven工程2.1 打包方式&#xff1a;jar2.2 引入依赖3、创建MyBatis的核心配置文件4、创建m…

通俗简介:操作系统之进程的管理与调度

操作系统是一个复杂的软件&#xff0c;具备许多功能。其中&#xff0c;进程的管理与调度是与我们密切相关的。本文将对操作系统功能中进程管理与调度作出介绍。 目录 一、进程 二、 进程管理 1、进程管理的概念 2、进程结构体的核心属性 3、进程调度 &#xff08;1&#…

如何将pdf文件压缩?pdf压缩软件哪个好

PDF是一种常见的文档格式&#xff0c;因为包括文本格式和图像&#xff0c;我们往往采用这种格式进行文件传输和分享&#xff0c;但是也常常会因为pdf文件过大导致使用起来非常不方便&#xff0c;那么如何如何将pdf文件压缩&#xff08;https://www.yasuotu.com/pdfyasuo&#x…

禁用非必需插件,让 IDEA 飞起

文章首发于个人博客&#xff0c;欢迎访问关注&#xff1a;https://www.lin2j.tech IDEA 为我们提供了众多的插件&#xff0c;但是这些插件并不都是必须的。如果电脑的性能不够强&#xff0c;反而会带来一些不必要的资源消耗。 因此这里整理了一些不常用的插件&#xff0c;可以…

如何让AI帮你干活-娱乐(3)

背景今天的话题会偏代码技巧一些&#xff0c;对于以前没有接触过代码的朋友或者接触代码开发经验较少的朋友会有些吃力。上篇文章介绍了如何广视角的生成相对稳定的视频。昨天的实现相对简单&#xff0c;主要用的是UI界面来做生成。但是生成的效果其实也显而易见&#xff0c;不…

【个人首测】百度文心一言 VS ChatGPT GPT-4

昨天我写了一篇文章GPT-4牛是牛&#xff0c;但这几天先别急,文中我测试了用GPT-4回答ChatGPT 3.5 和 Notion AI的问题&#xff0c;大家期待的图片输入也没有出现。 昨天下午百度发布了文心一言&#xff0c;对标ChatGPT&#xff0c;录屏无实机演示让百度股价暴跌。但是晚上百度就…

不要迷信 QUIC

很多人都在强调 QUIC 能解决 HoL blocking 问题&#xff0c;不好意思&#xff0c;我又要泼冷水了。假设大家都懂 QUIC&#xff0c;不再介绍 QUIC 的细节&#xff0c;直接说问题。 和 TCP 一样&#xff0c;QUIC 也是一个基于连接的&#xff0c;保序的可靠传输协议&#xff0c;T…

【测试开发篇4】测试模型

目录 一、软件测试V模型 编码前 概要设计&#xff1a; 详细设计&#xff1a; 编码后&#xff1a; 单元测试&集成测试 系统测试 验收测试 V模型的特点 优点&#xff1a; 缺点&#xff1a; 二、软件测试W模型 编码之前&#xff1a; 编码的时候&#xff1a; 编…

全网最详细,Jmeter性能测试数据写入文件(总结)看这篇就够了......

目录&#xff1a;导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09;前言 jmeter 性能测试数据…