条款02:尽量以const,enum,inline替换#define
程序员文章站
2022-09-13 20:52:20
[TOC] 1. 总结 对于单纯常量,最好以const常量或enum替换 define 对于宏代码段,最好改用inline函数替换 define 2. 使用const常量或enum替换宏常量 当我们以const常量替换 define,有两种特殊情况值得说说。 class外部的常量指针 第一种是定义c ......
目录
1. 总结
- 对于单纯常量,最好以const常量或enum替换#define
- 对于宏代码段,最好改用inline函数替换#define
2. 使用const常量或enum替换宏常量
当我们以const常量替换#define,有两种特殊情况值得说说。
class外部的常量指针
第一种是定义class外部的常量指针,这种常量定义式通常放在头文件内以便被不同的源文件使用,因此有必要将指针本身声明为const。
例如要在头文件内定义一个常量char *-based字符串,必须写两次const(左数右指),如下所示。
const char *const authorname = "scott meyers"; //必须写两次const,左数右指 const std::string authorname("scott meyers"); //更好的做法是采用string类型
class专属常量
第二个值得注意的是class专属常量,为了确保该常量最多只有一份实体,必须让它成为static成员变量。
class gameplayer { private: static const int numturns = 5; //常量声明式,而非定义式 int scores[numturns]; //使用该常量 };
注意,该示例中展示的是numturns的声明式而非定义式,定义式应按照类的static成员变量的语法要求在.cpp文件中进行。
但如果一个常量既是class专属常量又是static且为整数类型(int、char、bool等),则需特殊处理,只要不取它们的地址,你可以声明并使用它们而无需提供定义式。
注意,in-class初值设定只适用于static整数常量,而且即使是static整数常量,有些编译器也可能不支持这种操作,遇到这种情况,可以将初值放在定义式中。
class gameplayer { private: static const double fudgefactor; //非整数常量,无法进行-in-class初值设定 static const int numturns; //即使是整数常量,编译器也可能不支持in-class初值设定 }; //static常量定义,位于.cpp文件 const double gameplayer::fudgefactor = 1.35; const int gameplayer::numturns = 5;
如果编译器不支持static整数常量的in-class初值设定,但该常量又必须在class编译期间使用,如gameplayer::scores数组大小,可改用enum代替const。
class gameplayer { private: enum { numturns = 5 }; int scores[numturns]; };
上一篇: 亚洲五大灵异事件排名,现实版的借尸还魂
下一篇: 小米9指纹快捷功能超赞:付款一气呵成
推荐阅读
-
条款02:尽量以const,enum,inline替换#define
-
Effective C++笔记之二:尽量以const、enum、inline替换#define
-
Effective C++ 条款02 尽量以const,enum,inline替换#define
-
《Effective C++》读书笔记 条款02 尽量以const,enum,inline替换#define
-
条款02:尽量以const,enum,inline替换#define
-
条款02:尽量以const,enum,inline 替换 #define
-
《Effective C++》读书笔记 条款02 尽量以const,enum,inline替换#define