3. 编码风格

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

谷歌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开头,后跟大写单词开头

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

类成员变量下划线结尾


头文件中只用了指针/引用,前向声明而非引入头文件
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Vue2的编码风格与Vue3的编码风格有所不同,Vue3使用更多的ES6/7特性,并使用更加简洁的抽象语法来编写模板,而Vue2更偏向于传统的JavaScript语法。此外,Vue3也支持异步组件,以及更好的错误处理功能。 ### 回答2: Vue2和Vue3的编码风格有以下几点区别: 1. Composition API:Vue3引入了Composition API,它允许我们将逻辑组合成可重用的逻辑片段,而不是使用Vue2中的Options API。Composition API更加灵活和直观,使得代码更易于维护和复用。 2. 类型检查:Vue2需要通过第三方库(如TypeScript)来实现类型检查,而Vue3标准库中已经内置了更好的类型检查支持。Vue3通过Typescript的引入,提供了更好的类型推断和编辑器支持,降低了出错率。 3. 数据响应式系统:Vue2使用了基于Object.defineProperty的响应式系统,而Vue3使用了Proxy对象来实现。Proxy对象比Object.defineProperty具有更多的内置功能和更好的性能,提供了更强大和更灵活的响应式能力。 4. 打包体积:Vue3对打包体积进行了优化,使用tree-shaking技术,可以在打包时只包含使用到的模块,减小项目体积。同时,Vue3还针对各种构建器(如Webpack和Rollup)进行了优化,提升了打包速度。 5. 生命周期钩子函数:Vue3废弃了一些Vue2中的生命周期钩子函数,如beforeMount和destroyed,取而代之的是新的钩子函数。这样做是为了更好地管理生命周期,并提供更好的性能。 总之,Vue3在编码风格上进行了一些改进,引入了Composition API、强化了类型检查、优化了响应式系统和打包体积等方面。这些改进使得Vue3更加灵活、易于维护和高效,为开发者提供了更好的开发体验。所以,在选择Vue版本时,根据具体需求和项目情况选择适合的版本。 ### 回答3: Vue2和Vue3的编码风格有以下几个主要区别: 1. 响应式系统:Vue2使用的是基于Object.defineProperty的响应式系统,而Vue3则采用了基于Proxy的响应式系统。Vue3的Proxy响应式系统能够检测到更精确的数据变化,提升了性能和效率。 2. 组件的引入方式:在Vue2中,我们需要使用Vue.extend()或者Vue.component()的方式来引入和定义全局组件。而在Vue3中,可以直接使用defineComponent()方法来定义全局组件。 3. Composition API的引入:Vue3引入了Composition API,可以更方便地管理组件的逻辑代码。相比于Vue2的Options API,Composition API能够更好地组织和复用组件的逻辑,提高代码的可维护性。 4. 编译优化:Vue3对编译进行了优化,编译后的代码体积更小,性能更好。Vue3中新增了静态提升和源码编译,可以减少编译后的代码量和运行时的负担。 5. 更好的TypeScript支持:Vue3对TypeScript的支持更加友好,引入了更多的TypeScript类型定义,可以提供更好的开发体验和代码提示。 总的来说,Vue3在性能、开发体验和代码管理方面进行了一系列的改进和优化。虽然相比Vue2,Vue3引入了一些新的语法和概念,但通过学习和适应,我们能够更好地编写Vue应用,并享受到更好的开发体验和性能提升。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值