这是如何发生静态的?

pap*_*ane 1 c++

需要帮助以了解以下行为.

static int a;
int b[a];

for(int i=0; i<10; i++)
    b[i] = i+1;

for(int i=0; i<10; i++)
    cout << " " << b[i];
Run Code Online (Sandbox Code Playgroud)

输出为$> 1 2 3 4 5 6 7 8 8 10

但是,如果我将变量'a'声明为auto [like int a],那么它会在运行时崩溃,这很明显.但为什么它与静态一起工作.此外,如果我运行循环更多的时间(高于10)它崩溃.我做了12并且它崩溃了.此外,输出8在8和10之间而不是9,这是异常的.请帮忙.....

Ber*_*ron 5

没有显式初始值设定项的静态变量初始化为零.

static int a;
int b[a];
Run Code Online (Sandbox Code Playgroud)

b被初始化为0的数组int.

C++不进行任何边界检查,它允许您在其边界外访问数组,但它会调用未定义的行为.


int b[a]; 声明一个可变长度数组,这只是编译器提供的扩展,这不是标准的一部分,因此不可移植.

正如@Als建议的那样,您可以使用-pedantic编译器选项进行编译,这会产生类似的东西

ISO C++禁止可变大小的数组


你似乎想要的只是

static int b[10];
Run Code Online (Sandbox Code Playgroud)