声明、定义、赋值、初始化变量

Declaring, defining, assigning, initialising variables

本文关键字:变量 初始化 定义 声明 赋值      更新时间:2023-10-16

这是c++的参考。这个问题可以追溯到6个月前,当时我认为声明是:

int a;

定义是:

a = 5;

同时,:

int a = 5;

既是声明又是定义。

我现在明白了:

int a;

是定义,而不仅仅是声明。(我不知道为什么)。

此外,还有诸如赋值和初始化之类的术语,这些术语给这个问题增加了更多的术语。

所以这是我目前的理解(请纠正任何错误):

int a;    // Declaration and definition
int a = 5 // Declaration, definition, assignation and initialisation.
a = 5;    // Initialising (if for the first time),
          // assigning (if for subsequent times),
          // defining (not sure about this one).

我已经读了很多关于这个话题,但我仍然很困惑。有人能具体解释一下吗?我知道在这种情况下会有哲学上的争论,比如零是偶数,还是偶数。哈哈,有人能试试吗?谢谢。

声明可以在翻译单元中引入一个或多个名称,也可以重新声明以前声明中引入的名称。

定义是在某些特定情况下的声明。(即带有初始化式的声明)。这是因为它们必须满足一个定义规则。所有定义都是声明,反之亦然。

Initialization在变量的定义中给出一个初始值。初始化也会在其他情况下发生(例如:函数参数传递)

赋值用于将一个新值赋给一个已经存在的对象。

在你的具体情况下

int a;    // definition, default-initialization if it's local, zero-initialization otherwise
int a = 5; // definition, copy-initiaization
a = 5;   // assignment

同样,下面是声明而不是定义

extern int i;  // declaration but not definition