变量声明是定义吗?

时间:2017-06-28 21:52:29

标签: c++

cppreference州:

  

每个声明都是一个定义,但以下情况除外:

然后我在异常列表中看不到非静态(本地)变量。但是,我知道为什么静态变量在声明时被认为是定义的,因为它们被初始化为零。但非静态变量是不确定的,那些被认为是在声明时被定义的非静态变量 - 与静态变量一样吗?

示例:

int x; // zero
int y = 0; // also zero

void foo() {
    static int x; // also zero
}

所以这里所有的xy都被初始化为零,因此我认为如果这些声明被视为定义,我就会得到它。

但是

void foo() {
    int x;
    printf("%d", x); // the compiler is free to crash here
}

x的声明是否也是一个定义,我的意思是这个声明并没有真正初始化为什么,对吗?

事实上,我一直认为声明和定义之间存在明显的差异,例如int x;class X;int x = 2class X {};

另外,如果声明静态变量也是定义,为什么静态类成员包含在异常列表中而不是静态变量不是类的成员?

0 个答案:

没有答案