3. 编码风格

news2024/11/23 21:35:51

学习的动力不止于此:
在这里插入图片描述

谷歌c++编码风格指南

学习它就是强,没别的。方便查bug!

1.注释说明

//copyright 2023 songshuaibiancheng Inc
//License(BSD/GPL/...)
//Author: songshu
//This is a c++ style guide

/*
版权
许可证
作者
文件内容简短说明
*/

2.命名规则

/*
实现文件  扩展名.cc
文件名全小写,可包含下划线或短线
例如:test_guide.cc
*/

为什么是.cc,而不是我们常用的.c 和 .cpp呢?

cc文件是Linux/Unix下为C++源文件的默认扩展名。搞代码的不用linux怎么行呢!

头文件 扩展名 .h
文件名全小写,可包含下划线或短语

这个没什么好说的。

二、包含头文件

#include "eventloop.h"
#include <sys/types.h>
#include <vector>
#include "base/basictypes.h"
#include "foo/public/bar.h"

using std::string

包含次序标准化是为了避免有些你无法预测的依赖问题:
1.本类的声明(第一个包含本类的.h文件,有效减少依赖)
2.c系统文件
3.c++系统文件
4.其他库头文件
5. 本项目内头文件(避免使用UNIX文件路径"."和“…”)

可以在整个cc文件和h文件的函数内使用using
禁止使用using namespace xx污染命名空间

#ifndef PROJECT_EVENTLOOP_H_
#define PROJECT_EVENTLOOP_H_

这是头文件中,防止重复包含头文件
宏格式为:

<project>_<path>_<file>_

头文件中尽量使用前置声明
STL类例外 不使用前置声明 使用#include
命名空间全小写 顶头无空格 cc文件里提倡使用不具名命名空间

什么是不具名空间?
不具名空间依然是外链接的,但是外界由于不知道名字所以无法访问,这样就具有了内链接的特性。使用不具名空间是为了保持对象的局部性。

三、自定义一个命名空间

namespace mynamespace{
EventLoop::EventLoop()
	: _num_entries_(10),
	  _num_complated_connections_(false) {
	  ...
}

ReturnType ClassName::ReallyLongFunctionName(const Type& par_namel,
											 Type* par_name2) {
	bool retval = DoSomething(averyveryverylongargument1,
							  argument2,argument3);
	if (condition) {
	  for (int i = 0; i < kSomeNumber; ++i) {
		if (this_one_thing > this_other_thing &&
			a_third_thing == a_fourth_thing) {
			// TODO
		}
	  }
	} else {
	  nt j = g();
	}
	switch (var) {
	  case 0: {
	    ...
		break;
	  }
	  default: {
	    assert(false);
	  }
	}
	return x;
}

}//namespace mynamespace

多行初始化列表,”:“前4个空格缩进,以“," 结尾
多个变量折行对齐
单行初始化列表 Class::Class() : _var(xx) {
构造函数中只进行那些没有实际意义的初始化

参数过多时,“,”结尾每行一个变量对齐,结尾用“,”
条件括号内无空格时 (condition)左右1空格,if执行体2个空格缩进

条件变量过多时,条件运算符 && 结尾条件左对齐

临时方案写TODO注释,加你的大名,邮件地址等



大括号与else同行,else左右1空格 
尽量使用初始化时声明

条件相对Switch 2个空格缩进
执行体 相对switch  4个空格缩进

若default永不执行可用assert 
返回值不需要加括号

加命名空间结束注释



尽量不使用宏
不使用异常
禁止使用RTTI
使用printf之类的代替流
除位域不使用无符号数字
除特定环境,不使用操作符重载
使用4种cast运算符类型转换
禁止使用Class类型全局变量
若使用必须为单例模式
sizeof(var) 代替 sizeof(type)
scoped_ptr可以胜任智能指针
特殊情况下可用shared_ptr
任何时候都不使用auto_ptr

四、头文件

class Channel;

namespace mynamespace {

class EventLoop : public CallbackInterface {
 public:
  typedef vector<int> IntVector;
  enum UrlTableErrors {
	ERROR_OUT_OF_MEMORY = 0,
	ERROR_MALFORMED_INPUT,
  };
  explicit EventLoop(const int xx);
  
  void Add(const std::string& input, Channel* output)
  
  int num_entries() const {return num_entries_;}
  void set_num_entries(int num_entries) { num_entries_ = num_entries; }
  
 private:
  DISALLOW_COPY_AND_ASSIGN(EventLoop);
  
  const int kDaysInWeek = 7;
  int num_entries_;
  int num_complated_connections_;
  
  Channel* channel_;
};

}  //namespace mynamespace

#endif //PROJECT_EVENTLOOP_H_     保护宏结尾加注释


类名大写开头单词,使用组合通常比使用继承更适合

若用继承,只用公有继承
另:接口类命名 以 “Interface”结尾
访问限定符 一个空格缩进

限定符内,声明顺序:
1 typedefs和enums
2 常量
3 构造函数
4 析构函数
5 成员函数,含静态数据成员
6 成员变量,含静态成员变量


枚举同类名,大写开头单词,2个空格缩进,全大写下划线

explicit修饰单参数构造函数,防止隐式类型转换调用
若定义了成员变量无其他构造函数,要定义一个默认构造函数

普通函数命名,大写开头单词,输入参数在前为const引用,输出参数在后为指针,不为参数设置缺省值

存取含命名:取:同变量名,存:值含名为set_varname
短小的存取函数可用内联

尽可能使用const

仅在需要拷贝对象时使用拷贝构造含
不需要拷贝时在private里使用DISALLOW_COPY_AND_ASSIGN宏

变量用描述性名称,不要节约空间,让别人能理解你的代码更重要

const 变量为k开头,后跟大写单词开头

变量命名:全小写,有意义的单词和下划线

类成员变量下划线结尾


头文件中只用了指针/引用,前向声明而非引入头文件

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

字节5年老测试,2月无情被辞。业务与技术你要理解的概念!

前言近年来企业对于员工的要求不再满足于简单的处理工作&#xff0c;除了KPI考核&#xff0c;越来越多的公司会对思考力、理解力进行更深层次的综合评估&#xff0c;对于精准人才的筛选大搞特搞“末位淘汰制”。一个在大厂工作认识几年的朋友跟我说&#xff0c;单一的能力很难受…

Gorm -- 配置连接、Gorm模型及Tag描述

文章目录引入依赖读取配置文件配置数据库连接池定义模型数据库表信息创建对应结构体数据模型中字段的标签属性columnserializerprimaryKeydefaultautoIncrement / AUTO_INCREMENTembedded / embeddedPrefixautoCreateTimeautoUpdateTime-foreignKey / references引入依赖 go g…

Tesseract OCR与文本智能识别

博主简介 博主是一名大二学生&#xff0c;主攻人工智能研究。感谢让我们在CSDN相遇&#xff0c;博主致力于在这里分享关于人工智能&#xff0c;c&#xff0c;Python&#xff0c;爬虫等方面知识的分享。 如果有需要的小伙伴可以关注博主&#xff0c;博主会继续更新的&#xff0c…

SQL工具性能实测:居然比Navicat还快,数百万行数据导出仅51秒

如今的SQL语言逐渐成为职场人士必备的能力。为了让更多SQL用户有一款免费又好用的SQL工具&#xff0c;麦聪软件于2023年1月初发布了一款Web版SQL工具SQL Studio&#xff0c;一经推广就赢得了众多用户的注册下载。 使用SQL Studio最明显的体验是什么&#xff1f;笔者回访中发现…

Centos系统里运行java的jar包

目前使用springboot开发是嵌入方式的tomcat&#xff0c;不需要单独使用tomcat&#xff0c;那么经常在服务器上运行jar包&#xff0c;这里记录一下在centos7系统里运行jar的方式。在运行之前需要确定centos7系统是否安装了java环境以及配置环境变量&#xff0c;还有jar需要运行的…

Go语言基准测试(benchmark)三部曲之二:内存篇

欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码)&#xff1a;https://github.com/zq2599/blog_demos 本篇概览 本文是《Go语言基准测试(benchmark)三部曲》的第二篇&#xff0c;目标是掌握如何用基准测试来观察被测方法的内存分配情况今天除了常规的操作&…

回溯算法章末总结

组合问题的特点 &#xff08;1&#xff09;abba 选中a之后&#xff0c;就不再选了 &#xff08;2&#xff09;找出所有的组合 &#xff08;长度可以不相等&#xff09; 组合问题模板 做回溯题步骤 &#xff08;0&#xff09;判断问题类型 &#xff08;1&#xff09;树状图 …

【百度 JavaScript API v3.0】LocalSearch 位置检索、Autocomplete 结果提示

地名检索移动到指定坐标 需求 在输入框中搜索&#xff0c;在下拉列表中浮动&#xff0c;右侧出现高亮的列表集。选中之后移动到指定坐标。 技术点 官网地址&#xff1a; JavaScript API - 快速入门 | 百度地图API SDK 开发文档&#xff1a;百度地图JSAPI 3.0类参考 实现 …

Pillow图像处理(PIL.Image类的详细使用)

文章目录Opencv、Matplotlib(plt)、Pillow(PIL)、Pytorch读取数据的通道顺序Python图像处理库&#xff08;PIL、Pillow、Scikit-image、Opencv&#xff09;Pillow 官方文档&#xff08;超详细&#xff0c;超推荐&#xff09;一、PIL库与Pillow库的区别二、Pillow库&#xff08;…

Vue3 目录结构

Vue3 目录结构 架构搭建 请确保你的电脑上成功安装 Node.js&#xff0c;本项目使用 Vite 构建工具&#xff0c;需要 Node.js 版本 > 12.0.0。 查看 Node.js 版本&#xff1a; node -v建议将 Node.js 升级到最新的稳定版本&#xff1a; 使用 nvm 安装最新稳定版 Node.js…

使用docker配置mysql主从复制

1.新建主服务器容器实例&#xff1a; docker run -p 3307:3306 --name mysql \ -v /docker/mysql/data:/var/lib/mysql \ -v /docker/mysql/conf:/etc/mysql/conf \ -v /docker/mysql/log:/var/log/mysql \ -e MYSQL_ROOT_PASSWORDroot \ -d mysql:5.7 设置容器卷之后&#xf…

Java网络编程之UDP和TCP套接字

文章目录一. 网络编程概述二. UDP网络编程1. UDP套接字2. UDP客户端回显服务器程序2.1 UDP回显服务器2.2 UDP客户端2.3 UDP实现查词典的服务器三. TCP网络编程1. TCP套接字2. TCP客户端回显服务器程序2.1 TCP回显服务器2.2 TCP客户端2.3 解决服务器无法同时出力多个客户端的问题…

牛客专访ChatGPT:2023校园招聘如何做?附校招趋势

春招在即&#xff0c;牛客作为新一代数智化校园招聘引领者&#xff0c;为大家采访了当下“顶流ChatGPT”&#xff0c;关于近几年校园招聘的变化及2023企业做校招的建议。以下&#xff0c;为“ChatGPT专访”实录。01. ChatGPT眼中近3年校园招聘的变化牛客&#xff1a;很高兴作为…

Unity Material详解

一、创建 二、属性 1.Shader:Unity内置了一些shader&#xff0c;用户自定义的shader也在这里出现. Edit: 可以编辑一些shader可编辑的内容&#xff0c;如一些属性. 2.Rendering Mode:渲染模式 Opaque-不透明-石头适用于所有的不透明的物体Cutout-镂空-破布透明度只有0%和100…

go语言环境配置 项目启动

一 安装go语言 go语言各个版本之间兼容性比较差。所以可能你需要安装固定的版本 1 安装最新版的go brew install go2 查看go可以安装的版本 brew search go3 安装指定版本的go brew install go1.134 查看安装的go语言的版本 go version5 查看go的安装路径 which go || w…

【软件测试】稳定性测试怎么做,这篇文章彻底讲透了~

稳定性对产品的重要性不言而喻。 而作为质量保障&#xff0c;在稳定性测试方面的探索也在不断演化。记得两年前我们做稳定性测试还是基于恒定的压力&#xff0c;7*24小时长时间运行&#xff0c;关注的指标无非是吞吐量TPS的抖动、响应时间的变化趋势&#xff0c;以及各种资源是…

《机器学习系统:设计和实现》读后感和一些思考

目录 计算图、编译器前端、编译器后端 计算图 计算图的作用 计算图的组成 静态计算图与动态计算图 编译器前端 IR中间表示 机器学习框架的中间表示 常见编译器前端优化方法 编译器后端 概述 通用硬件优化&#xff1a;算子拆分和算子融合 算子信息 数据精度和存储…

opencv访问图像(MAT)的属性

大家好&#xff0c;我是csdn的博主&#xff1a;lqj_本人 这是我的个人博客主页&#xff1a; lqj_本人的博客_CSDN博客-微信小程序,前端,python领域博主lqj_本人擅长微信小程序,前端,python,等方面的知识https://blog.csdn.net/lbcyllqj?spm1011.2415.3001.5343哔哩哔哩欢迎关注…

设计模式:装饰模式

1、装饰模式 1&#xff09;定义 动态&#xff08;组合&#xff09;地给一个对象增加一些额外的职责。就增加功能而言&#xff0c;Decorator模式比生成子类&#xff08;继承&#xff09;更为灵活&#xff08;消除重复代码&减少子类个数&#xff09;。 2&#xff09;动机&…

Harbor安装部署实战详细手册

文章目录前言一、安装docker二、安装docker-compose1.下载2.赋权3.测试三、安装harbor1.下载2.解压3.修改配置文件4.部署5.配置开机自启动6.登录验证7.补充说明四、harbor使用问题1.docker login问题&#xff1a;Error response from daemon: Get https://: http: server gave …