Google的C++编程规范随记

本文详细介绍了Google的C++编程规范,涵盖头文件、作用域、类、Google特有规定和其他C++特性等方面,强调了命名约定、注释和格式的重要性。规范包括头文件的保护、命名空间的使用、类的构造函数职责、智能指针的应用以及各种C++特性的最佳实践。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、头文件

1.#define的保护

为防止头文件被多重包含,应使用:

#ifndef FOO_BAR_BAZ_H_
#define FOO_BAR_BAZ_H_

#endif

2.内联函数

注意:对于析构函数应慎重对待,析构函数往往比其表面看起来要长,因为有一些隐式成员和基类析构函数(如果有的话)被调用!

3.函数参数顺序(Function Parameter Ordering)

定义函数时,通常参数顺序为:输入参数在前,输出参数在后。

二、作用域

1.命名空间(Namespace)

.cpp 文件中,提倡使用不具名的命名空间(unnamed namespaces),但是,不具名空间容易违背C++的唯一定义原则(One Definition Rule(ODR))。应视情况选择使用。

1)不具名命名空间(Unamed Namespaces)

可避免运行时的命名冲突:

//.cpp文件
namespace{                

//命名空间的内容无需缩进
enum{EOF};
bool AtEof(){return pos_==EOF;}  //使用本命名空间内的符号EOF
} //namespace

2)具名命名空间(Namee Namespaces)

 //.h文件
 namespace mynamespace{

 //所有声明都置于命名空间中
 //注意不要使用缩进
 class MyClass{
 public:
  ...
  void Foo();
  };
  } //namespace mynamespace
  
  // .cpp文件
  namespace mynamespace{
  //函数定义都置于命名空间中
  void MyClass::Foo(){
   ...
   }
   }  //namespace mynamespace

另外,最好不要使用using指示符,以保证命名空间下的所有名称都可以正常使用。

// 禁止——污染命名空间
using namespace foo;

命名空间别名:
namespace fbx = ::foo::bar::baz;

2.非成员函数

有时,不把函数限定在类的实体中是有益的,甚至需要这么做,要么作为静态成员,要么作为非成员函数。非成员函数不应依赖于外部变量,并尽量置于某个命名空间中。相比单纯为了封装若干不共享任何静态数据的静态成员函数而创建类,不如使用命名空间。

3.局

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值