标签:
#define ASPECT_RATIO 1.653记号名称ASPECT_RATIO也许从未被编译器看见;也许在编译器开始处理源代码之前它就被预处理器移走了.于是ASPECT_RATIO可能没有进入记号表(symbol table)内.于是运用此常量但获得一个编译错误时,可能会带来困惑,因为这个错误信息也许提到1.653而不是ASPECT_RATIO.
const double AspectRatio = 1.653;作为一个语言常量,AspectRatio可能会被编译器看到,一定会进入记号表内.此外对于浮点常量而言,使用常量可能会比使用#define导致较小量的代码,因为预处理器"盲目地将宏名称ASPECT_RATIO替换为1.653"可能导致目标码出现多份1.653,若是改用常量则不会出现这种情况.
const char *const authorName = "Scott Meyers";关于 const 的意义和使用(特别是当它与指针结合时),条款3有完整的讨论.string对象通常比其前辈char*-base合宜,所以上述的authorName往往定义这样更好:
const std::string authorName("Scott Meyers");第二个值得注意的是 class 专属常量.为了将常量的作用域限制于 class 内,必须让它成为 class 的一个成员;而为确保此变量至多只有一份实体,必须让它成为一个 static 成员:
class GamePlayer { private: static const int NumTurns = 5; int scores[NumTurns]; };然而看到的是NumTurn的声明式而非定义式.通常C++要求对所使用的任何东西提供一个定义式,但如果它是个 class 专属常量又是 static 且为整数类型,则需要特殊处理.只要不取它们的地址,可以声明并使用它们而无须提供定义式.但如果取出某个 class 专属常量的地址,就必须提供定义式如下:
const int GamePlayer::NumTurns ;由于 class 常量已在声明时获取初值,因此定义时不可以再设初值.
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:
原文地址:http://blog.csdn.net/yiranant/article/details/47988589