声明、定义、赋值、初始化变量
Declaring, defining, assigning, initialising variables
这是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
相关文章:
- 为什么C++有不同的变量初始化方式?
- 静态 constexpr 成员变量初始化
- C++不同的变量初始化
- 全局和局部变量初始化与 constexpr 的差异背后的基本原理
- 是变量初始化失败吗?
- 视觉C++:在 DLL 加载期间,全局变量初始化顺序是否具有确定性?
- 类静态变量初始化顺序
- 使用 constinit 变量初始化 constexpr 变量
- 是否可以在不修改父类的情况下将成员变量初始化推迟到继承的类?
- 使用全局变量初始化不同编译单元中的其他全局变量
- 使用默认构造函数引用成员变量初始化错误
- 宏的 if 语句中的变量初始化
- 不稳定的C :每行适应性变化多变量初始化
- 同一函数中的静态函数变量初始化顺序
- C 语言中的静态变量初始化
- 错误:调用'begin(long double [nPoints])'没有匹配函数;使用硬编码的 int 与整数变量初始化向量
- 类POD成员变量初始化
- 尝试捕获类变量初始化的范围
- 共享库中 __attribute__((构造函数)) 的全局/静态变量初始化问题
- 多变量初始化编译器支持