声明、定义、分配、初始化变量 这是参考C++的。我提出的这个问题可以追溯到大约6个月前,当时我认为声明是: int a;

声明、定义、分配、初始化变量 这是参考C++的。我提出的这个问题可以追溯到大约6个月前,当时我认为声明是: int a;,c++,initialization,declaration,definition,assign,C++,Initialization,Declaration,Definition,Assign,定义是: a = 5; 此外,还建议: int a = 5; 这既是一种声明,也是一种定义 我现在明白了: int a; 是一个定义,而不仅仅是一个声明。(我不知道为什么) 此外,还有一些术语,如赋值和初始化,为问题添加了更多术语 以下是我目前的理解(请更正任何内容): 关于这个话题,我读了不少书,但仍然感到困惑。有人能解释清楚每一个是什么吗?我知道在这种情况下会有哲学上的争论,比如零是偶数,还是偶数。哈哈,有人能试试吗?谢谢。声明可以在翻译单元中引入一个或多个名称,或者重新声明以前声明引

定义是:

a = 5;
此外,还建议:

int a = 5;
这既是一种声明,也是一种定义

我现在明白了:

int a;
是一个定义,而不仅仅是一个声明。(我不知道为什么)

此外,还有一些术语,如赋值和初始化,为问题添加了更多术语

以下是我目前的理解(请更正任何内容):


关于这个话题,我读了不少书,但仍然感到困惑。有人能解释清楚每一个是什么吗?我知道在这种情况下会有哲学上的争论,比如零是偶数,还是偶数。哈哈,有人能试试吗?谢谢。

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

定义在某些情况下是一种声明。(即,带有初始值设定项的声明)。这是因为它们必须满足一个定义规则。 所有定义都是声明,但不是相反

初始化为定义中的变量提供初始值。初始化也会在其他情况下发生(例如函数参数传递)

赋值用于为已存在的对象赋值

在你的特殊情况下

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

“初始化”表示您提供一个初始值(特殊情况是当您显式提供一个空列表时,该列表仍被视为初始化)。为什么这个旧问题出现在活动问题中?我不是那个把它挖出来的人。我第一次学习的时候问了这么多年。其含义似乎相当武断,取决于我认为的标准。例如,是否在类a定义中声明了int?我不认为是,只是一个声明。但在全球空间的一个类之外,它是。
extern int i;  // declaration but not definition