我的问题源于Scott Meyers对Effective C++的研究。 在该书的第二部分中,写下如下:
要将常量的范围限制为类,必须使其成为成员,并且为了确保最多只有一个常量副本,必须使其成为静态成员。
这是正确写的。然后立即给出以下示例:
class GamePlayer {
private:
static const int NumTurns = 5;
int scores[NumTurns];
....
};
然后写下以上例子:
您在上面看到的是声明,而不是NumTurns的定义。
我的第一个问题是:这句话的含义是什么?
之后立即提到以下内容:
通常C ++要求您为所使用的任何内容提供定义,但是静态和整数类型的类特定常量(例如 - 整数,字符,bools)是一个例外。只要您不接受他们的地址,您就可以声明它们并在不提供定义的情况下使用它们。如果您确实将类的地址设为常量,或者即使您没有使用该地址,您的编译器也错误地坚持定义,您提供了一个单独的定义,如下所示:
const int GamePlayer::Numturns; //definition of NumTurns
为什么现在它是定义而不是声明?
我理解函数上下文中的差异,但在常规变量的上下文中不理解它。此外,有人可以通过
扩展作者的意思P.S:我是C ++的新手。...如果你确实把一个类的地址保持不变,或者你的... 以上引用段落的一部分?
答案 0 :(得分:0)
为什么现在它是定义而不是声明?
因为此语句导致编译器为静态变量生成地址。
此外,有人可以扩展作者的意思“如果你采取了 类常量的地址“:
当你指针指向变量时,你会得到它的地址。