Effective c++ 笔记二—尽量以const ,enum,inline替换#define

1.常量替换宏

const double AspectRatio = 1.653;

#define ASPECT_RATIO 1.653

宏定义并没有进入符号表(symbol table内),编译错误无法确定


2.定义常量指针constant pointers

头文件内定义一个常量的char* based字符串,你必须写const两次

const char* cosnt autorName = "Scott";

string对象通常比其前辈更合宜

const std::string autoName("Scott");


3.class 专属常量

为了将常量的作用于(scope)限制与class内,你必须让它成为class的一个成员(member),而为确保此常量制作只有一份实体,你必须让它成为一个static成员

class GamePlayer{

private:

static const int NumTurns = 5;

int scores[NumTurns];

...

};

然而你所看到是NumTurns的声明式,而非定义式。通常c++要求你对你使用的任何东西提供一个定义式,对那如果它是class专属常量又是static且为整数类型,则需特殊处理。只要不去他们的地址,你可以声明并使用她们而无须提供定义式。但如果你取某个class专属常量的地址,或纵使你不取器地址而你的编译器坚持要看到一个定义式,你就必须另外提供第一如下:

const  int GamePlayer::NumTurns;//NumTurns的定义


注意:

对于单纯变量,最好以const对象或enums替换#defines

杜宇形似函数的宏(macros),最好用inline函数替换#define



你可能感兴趣的:(Effective c++ 笔记二—尽量以const ,enum,inline替换#define)