This question already has answers here:
What is the difference between a definition and a declaration?

(24个答案)


5年前关闭。




我的问题源于研究Scott Meyers的Effective C++
在该书的第二项中,写着:



那是正确写的。然后立即给出以下示例:
class GamePlayer {
private:
    static const int NumTurns = 5;
    int scores[NumTurns];
    ....
  };

然后,以下内容与上述示例有关:



我的第一个问题是:此声明的含义是什么?

此后立即提到以下内容:



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

我了解函数上下文中的差异,但不了解常规变量上下文中的差异。另外,有人可以通过以下方式扩展作者的含义吗?



附注:我是C++的新手。

最佳答案

与函数一样,变量可以具有“纯声明性”声明和实际定义。您很困惑,因为您之前可能没有遇到很多纯变量声明。

int i; // Definition
extern int i, j; // (Re)declares i, and declares j
extern int j = 0; // Defines j (confusing, eh?)

正如您习惯使用函数一样,定义是声明,但并非所有声明都是定义。 §3.1/2读取



因此,类内静态数据成员声明永远不会定义它们声明的变量。但是,有时不必存在变量定义。当您可以直接使用其值而不需要变量运行时存在时,就属于

用技术术语来说,只要静态数据成员(或其他任何实体)不是“奇特使用”的,就不必定义它。所有实体的Odr使用在第3.2/3节中定义:



这看起来很复杂,并且在标准的早期版本中更简单。但是,粗略地说,当该表达式“立即”访问变量值时,某个表达式不会使用该变量,并且这种访问会产生一个常量表达式。 Meyers的“取其地址”示例只是许多odr用途之一。

对于某些类A及其静态数据成员i
class A {
    static const int i = 57; // Declaration, not definition
};

const int A::i; // Definition in namespace scope. Not required per se.

关于c++ - C++中变量的声明和定义之间有什么区别? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29954191/

10-11 22:45
查看更多