C ++中声明和变量定义之间有什么区别?

时间:2015-04-29 20:46:21

标签: c++

我的问题源于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 ++的新手。

1 个答案:

答案 0 :(得分:0)

  

为什么现在它是定义而不是声明?

因为此语句导致编译器为静态变量生成地址。

  

此外,有人可以扩展作者的意思“如果你采取了   类常量的地址“:

当你指针指向变量时,你会得到它的地址。