This question already has answers here:
What is the difference between a definition and a declaration?
(24个答案)
5年前关闭。
我的问题源于研究Scott Meyers的Effective C++。
在该书的第二项中,写着:
那是正确写的。然后立即给出以下示例:
然后,以下内容与上述示例有关:
我的第一个问题是:此声明的含义是什么?
此后立即提到以下内容:
为什么现在是定义而不是声明?
我了解函数上下文中的差异,但不了解常规变量上下文中的差异。另外,有人可以通过以下方式扩展作者的含义吗?
附注:我是C++的新手。
正如您习惯使用函数一样,定义是声明,但并非所有声明都是定义。 §3.1/2读取
因此,类内静态数据成员声明永远不会定义它们声明的变量。但是,有时不必存在变量定义。当您可以直接使用其值而不需要变量运行时存在时,就属于。
用技术术语来说,只要静态数据成员(或其他任何实体)不是“奇特使用”的,就不必定义它。所有实体的Odr使用在第3.2/3节中定义:
这看起来很复杂,并且在标准的早期版本中更简单。但是,粗略地说,当该表达式“立即”访问变量值时,某个表达式不会使用该变量,并且这种访问会产生一个常量表达式。 Meyers的“取其地址”示例只是许多odr用途之一。
对于某些类
(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/