在C ++书中,数组绑定必须是常量expression式,但为什么下面的代码工作?

#include <iostream> using namespace std; int main(){ int n=10; int a[n]; for (int i=0; i<n; i++) { a[i]=i+1; cout<<a[i]<<endl; } return 0; } 

在Mac下的Xcode4中工作得很好

正如书中所说,这应该是错的,为什么?

好糊涂〜

这是一个C99特性,称为VLA ,一些编译器也允许在C ++中使用。 它是在栈上的分配,就像int a[10]

这是允许VLA(可变长度数组)的C99function。

编译它与g++ -pedantic ,我敢肯定,不会编译。