我的问题源自于学习Scott Meyers的《Effective C++》。在该书第二条中,写道:
要将常量的作用域限制在类内,必须使其成为类成员,并确保最多只有一个常量副本,必须使其成为静态成员。
这是正确的。然后立即给出了以下示例:
class GamePlayer {
private:
static const int NumTurns = 5;
int scores[NumTurns];
....
};
以下是有关上面示例的说明:
您在上面看到的是NumTurns的声明,而不是定义。
我的第一个问题是:这个声明的意义是什么?
紧接着下面提到:
通常情况下,C++要求您为使用的任何内容提供定义,但静态且为整数类型(例如 - 整数,字符,布尔值)的类特定常量是一个例外。只要您不获取它们的地址,就可以声明并使用它们而无需提供定义。如果您确实取一个类常量的地址,或者如果您的编译器错误地坚持需要定义,即使您不取地址,您也可以提供一个单独的定义,如下所示:
const int GamePlayer :: Numturns; //定义NumTurns
现在为什么这是定义而不是声明?
我理解函数的上下文中的区别,但不理解普通变量的上下文中的区别。此外,有人能否扩展作者对上述引用段落的含义:
... if you do take the address of a class constant, or if your .. 部分的意思是什么?
P.S:我是C++的新手。