C++编程规范学习总结

 

 一、头文件

 

所有头文件都应该使用#define 防止头文件被多重包含(multiple inclusion),命名格式当是:<PROJECT>_<PATH>_<FILE>_H_为保证唯一性,头文件的命名应基于其所在项目源代码树的全路径。例如,项目foo 中的头
文件foo/src/bar/baz.h 按如下方式保护:
#ifndef FOO_BAR_BAZ_H_
#define FOO_BAR_BAZ_H_
...
#endif // FOO_BAR_BAZ_H_

 

内联函数

只有当函数只有10 行甚至更少时才会将其定义为内联函数(inline function)。

优点:当函数体比较小的时候,内联该函数可以令目标代码更加高效。对于存取函数
(accessor、mutator)以及其他一些比较短的关键执行函数

缺点:滥用内联将导致程序变慢,内联有可能是目标代码量或增或减,这取决于被内联的函
数的大小

结论:一个比较得当的处理规则是,不要内联超过10 行的函数。对于析构函数应慎重对待,
析构函数往往比其表面看起来要长,因为有一些隐式成员和基类析构函数(如果有的话)被
调用!
另一有用的处理规则:内联那些包含循环或switch 语句的函数是得不偿失的,除非在大多
数情况下,这些循环或switch 语句从不执行。

 

函数参数顺序(Function Parameter Ordering)

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

包含文件的名称及次序

次序如下:C 库、C++库、其他库的.h、项目内的.h。

二、作用域

在.cc 文件中,允许甚至提倡使用不具名命名空间,以避免运行时的命名冲突:

namespace { // .cc 文件中
// 命名空间的内容无需缩进
enum { UNUSED, EOF, ERROR }; // 经常使用的符号
bool AtEof() { return pos_ == EOF; } // 使用本命名空间内的符号EOF
} // namespace

不能在.h 文件中使用不具名命名空间。
具名命名空间使用方式如下:


命名空间将除文件包含、全局标识的声明/定义以及类的前置声明外的整个源文件封装起来,
以同其他命名空间相区分。

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

不要声明命名空间std 下的任何内容,包括标准库类的前置声明。声明std 下的实体会导
致不明确的行为,如,不可移植。声明标准库下的实体,需要包含对应的头文件。
最好不要使用using 指示符,以保证命名空间下的所有名称都可以正常使用。
// 禁止——污染命名空间
using namespace foo;
在.cc 文件、.h 文件的函数、方法或类中,可以使用using。
// 允许:.cc 文件中
// .h 文件中,必须在函数、方法或类的内部使用
using ::foo::bar;

非成员函数(Nonmember)、静态成员函数(Static Member)和全局函数(Global
Functions)

使用命名空间中的非成员函数或静态成员函数,尽量不要使用全局函数。

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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值