Effective C++ - 条款2 - in-class初值设定问题
pre
针对Effective C++ (55条)中的每一个条款写一个blog。
0x02 尽量以const, enum, inline 替换 #define
为什么需要这样做?因为使用define会使得变量被define的符号替换,在遇到错误时提示的是替换后的符号而非原始定义的符号,引起误解,因此应使用const替换。而如果是在类的作用域中,为了保持只有一份该数据,要声明为static。因此就要考虑static+const。
前置知识
- const成员变量的初始化必须通过初始化列表实现
- static成员变量在类内声明,在类外初始化。(因为static成员不属于对象,属于类,为了保持仅有一份的语义,这块内存应该在类外分配,而内存分配是在定义时完成的,因此类内static成员仅能声明,不能定义,即不能分配内存)
- static成员变量在类内声明时不要给初始值,以免老版本编译器不允许【in-class初值设定】问题。
- static成员在类外定义时不能加static关键字。
正确实现方法
- 如何做?
class GamePlayer {
private:
enum {NumTurns = 5};
int scores[NumTurns];
...
};
- 为什么?
因为有时候需要在编译时知道const值,为了避免【in-class初值】问题,借用enum来实现。
其理论基础是,enum的数值可以被视为整数类型。而整数类型允许【in-class初值】
本文来自博客园,作者:ijpq,转载请注明原文链接:https://www.cnblogs.com/ijpq/p/16597204.html