c++编码规范

本文档详述了C++编程的命名规范、代码书写原则、编译设置、头文件处理、作用域管理、类设计、STL容器使用、DLL处理、线程管理以及注释规则,旨在编写出高质量、易于理解和维护的C++代码。
摘要由CSDN通过智能技术生成

 

背景

每一个C++程序员也都知道,C++具有很多强大的语言特性,但这种强大不可避免的导致它的复杂,而复杂性会使得代码更容易出现bug、难于阅读和维护。

本规范的目的是通过详细阐述如何进行C++来规避其复杂性,使得代码在有效使用C++语言特性的同时还易于管理。

C++包含大量高级特性的巨型语言,某些情况下,我们会限制甚至禁止使用某些特性使代码简化,避免可能导致的各种问题。

命名规范

通用命名规则

类型名

类型名(类、结极体、类型定义(typedef)、枚举)以大写字母开始并混合大小写,如

Line, SavingsAccount

变量名

变量名必须以小写字母开始并混合大小写, 如

line, savingsAccount

函数名

函数名必须以小写字母的动词开始并混合大小写,如:

getName(), computeTotalWidth()

常量名

常量名(包括枚举值)必须全部大写并以下划线分隔,如

MAX_ITERATIONS, COLOR_RED, PI

 

类的私有变量

类的私有变量必须以下划线_作为后缀,如:

class SomeClass {

  private:

    int length_;

}

 

名字空间

名字空间的命名必须全部小写,如:

model::analyzer, io::iomanager, common::math::geometry

 

接口类

接口类的命名以前缀的大写I后跟类名, 如:

class IFoo

{

public:

       virtual ~IFoo(){};

       virtual void dooo() = 0;

}

 

模板类型名

模板类型命名必须是单个大写字母,如:

template<class T> ...

template<class C, class D> ...

缩略语

缩略语不必都是大写,如:

exportHtmlSource(); // 这样不好: exportHTMLSource();

openDvdPlayer();    // 这样不好: openDVDPlayer();

 

 

全局变量

       全局变量命名规则同变量名,只是全局变量必须总是以::来引用,如:

::mainWindow.open(), ::applicationContext.getName()

通用变量

通用变量(如函数参数)的命名应该就是它的类型,且首字母小写,如:

void setTopic(Topic* topic)  // 这样不好: void setTopic(Topic* value)

                            // 这样不好: void setTopic(Topic* aTopic)

                            // 这样不好: void setTopic(Topic* t)

 

void connect(Database* database)  // 这样不好: void connect(Database* db)

                                 // 这样不好: void connect (Database* oracleDB)

 

文件名

文件名全部小写,C++文件以.cpp结尾,头文件以.h结尾,文件名与文件里类的名字相同。

非通用命名规则

非通用变量(如局部变量)可以是这样:

  Point  startingPoint, centerPoint;

  Name  loginName;

函数名中不应该再包括对象名,如:

line.getLength();   //这样不好: line.getLineLength();

 

特殊命名规则

指针命名:

Line* line;   // 这样不好: Line* pLine;

            // 这样不好: Line* linePtr;

 

枚举常量可以使用一个公共的类型名作为前缀,如:

enum Color {

  COLOR_RED,

  COLOR_GREEN,

  COLOR_BLUE

};

 

bool类型的变量和函数返回值是bool的函数以is为前缀来命名,如:

isSet, isVisible, isFinished, isFound, isOpen

在某些情况下,有些比is前缀更适合(has, can, should),如:

  bool hasLicense();

  bool canEvaluate();

  bool shouldSort();

 

当有属性的情况下,使用get/set来存取,如:

employee.getName();

employee.setName(name);

matrix.getElement(2, 4);

<

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值