每个声明都是一个定义,但以下情况除外:
然后我在异常列表中看不到非静态(本地)变量。但是,我知道为什么静态变量在声明时被认为是定义的,因为它们被初始化为零。但非静态变量是不确定的,那些被认为是在声明时被定义的非静态变量 - 与静态变量一样吗?
示例:
int x; // zero
int y = 0; // also zero
void foo() {
static int x; // also zero
}
所以这里所有的x
和y
都被初始化为零,因此我认为如果这些声明被视为定义,我就会得到它。
但是
void foo() {
int x;
printf("%d", x); // the compiler is free to crash here
}
x
的声明是否也是一个定义,我的意思是这个声明并没有真正初始化为什么,对吗?
事实上,我一直认为声明和定义之间存在明显的差异,例如int x;
,class X;
与int x = 2
和class X {};
。
另外,如果声明静态变量也是定义,为什么静态类成员包含在异常列表中而不是静态变量不是类的成员?