In C ++ – Büchern muss die Array-Bindung ein konstanter Ausdruck sein, aber warum funktioniert der folgende Code?

#include  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; } 

funktionierte gut in Xcode4 unter Mac

Wie in Büchern gesagt, sollte es falsch sein, warum?

so verwirrt ~

   

Dieses aa C99-Feature namens VLA, das einige Compiler auch in C ++ erlauben. Es ist die Zuweisung auf dem Stapel, genau wie bei int a[10] .

Das ist C99 Feature, das VLA (Variable Length Array) ermöglicht.

Kompiliere es mit g++ -pedantic , ich bin mir sicher, dass das nicht kompilieren würde.