C++ 编程规范 1 常量
来源:互联网 发布:阿里云 代码托管 编辑:程序博客网 时间:2024/06/07 11:56
1 常量
不变的值更易于理解、跟踪和分析,所以应该尽可能地使用常量代替变量,定义值的时候,应该把const
作为默认的选项。
规则1.1 使用const常量取代宏
说明:宏是简单的文本替换,在预处理阶段时完成,运行报错时直接报相应的值;跟踪调试时也是显
示值,而不是宏名;宏没有类型检查,不安全;宏没有作用域。
示例:
#define MAX_MSISDN_LEN (20) //不好的例子
const int MAX_MSISDN_LEN = 20; //好的例子
规则1.2 一组相关的整型常量应定义为枚举
说明:之所以使用枚举,基于:
枚举比#define或const int更安全,因为编译器会检查参数值是否是否位于枚举取值范围内,从
而避免错误发生。
示例:
//好的例子:
enum DayOfWeek{sunday,monday, tuesday, wednesday, thursday, friday, saturday};
enum Color{black, blue, white, red, purple};
BOOL ColorizeCalendar(DayOfWeek today, Color todaysColor);
ColorizeCalendar(blue, sunday); //编译报错,Blue和Sunday位置错误
//不好的例子:
const int sunday = 0;
const int monday = 1;
const int black = 0;
const int blue = 1;
BOOL ColorizeCalendar(int today, int todaysColor);
ColorizeCalendar(blue, sunday); //不会报错
当枚举值需要对应到具体数值时,须在声明时显示赋值。否则不需要显式赋值,以避免重复赋值,
降低维护(增加、删除成员)工作量。
示例:
//好的例子:S协议里定义的设备ID值,用于标识设备类型
enum TDeviceType
{
DEV_UNKNOWN = -1,
DEV_DSMP = 0,
DEV_ISMG = 1,
DEV_WAPPORTAL = 2
};
程序内部使用,仅用于分类的情况,不应该进行显式的赋值。
示例:
//好的例子:程序中用来标识会话状态的枚举定义
enum TSessionState
{
SESSION_STATE_INIT,
SESSION_STATE_CLOSED,
SESSION_STATE_WAITING_FOR_RSP
};
应当尽量避免枚举值重复,如必须重复也要用已定义的枚举来修饰,例如:
typedef enum
{
RTCP_SR = 200,
RTCP_MIN_TYPE = RTCP_SR, //must be lowest known type
RTCP_RR = 201,
RTCP_SDES = 202,
RTCP_BYE = 203,
RTCP_APP = 204,
RTCP_RTPFB = 205,
RTCP_PSFB = 206,
RTCP_XR = 207,
RTCP_RSI = 208,
RTCP_PUBPORTS = 209,
RTCP_MAX_TYPE = RTCP_PUBPORTS //must be highest known type
} rtcp_type_t;
规则1.3 不相关的常量,即使取值一样,也必须分别定义
说明:一个常量只用来表示一个特定功能,即一个常量不能有多种用途。
示例:
//好的例子:协议A和协议B,手机号(MSISDN)的长度都是20。
unsigned const int A_MAX_MSISDN_LEN = 20;
unsigned const int B_MAX_MSISDN_LEN = 20;
//或者使用不同的名字空间:
namespace alib
{
unsigned const int MAX_MSISDN_LEN = 20;
}
namespace blib
{
unsigned const int MAX_MSISDN_LEN = 20;
}
建议1.1 尽可能使用const
说明:在声明的变量或参数前加上关键字const用于指明变量值不可被篡改 。类成员函数加上const
限定符表明该函数不会修改类成员变量的状态。
使用const常见的场景:
函数参数:传递引用时,如果函数不会修改传入参数, 该形参应声明为const。
成员函数:访问函数(如get函数);不修改任何数据成员的函数;未调用非const函数、未返回数
据成员的非const指针或引用的函数。
数据成员:如果数据成员在对象构造之后不再发生变化, 可将其定义为const。
- C++ 编程规范 1 常量
- 第五章 高质量C编程规范常量
- 《MISRA-C 2004工业标准化的C编程规范》笔记——常量、声明与定义
- Windows客户端C/C++编程规范“建议”——变量和常量
- 【8】 Windows客户端C/C++编程规范“建议”——变量和常量
- C++编程规范---第5章 常量
- [编程规范]一、多使用常量
- C语言编程规范1: 注释
- 1、Linux编程规范-C Coding Standard
- C/C++编程规范
- C/C++ 编程规范
- C#.NET编程规范
- C#.NET编程规范
- c语言编程规范
- c/c++编程规范
- c编程注意规范
- C 语言编程 规范
- C/C++编程规范
- solaris10安装oracle10g图解
- 连通问题 解题报告 ——2011软件大赛决赛 C组 本科第5题 原创By BossDong
- C++编程规范 总则
- 哈佛结构与冯诺依曼结构的异同
- CWnd::NotifyWinEvent 函数不接受 4 个参数的解决方案
- C++ 编程规范 1 常量
- poj 2352 stars (数状数组)
- 编程规范 总则
- Linux Shell脚本资料
- Tesseract-OCR3.01语言库训练步骤
- C++编程规范 2 初始化和类型转换
- 关于爱情
- HDU 2544 最短路(各种最短路算法的实现)
- C++编程规范 3 函数