正如我在c ++中所知道的,如果要创建数组,必须为其数组大小提供恒定的值。但是这里:
int main(){
int a;
cin >> a;
int b[a] = {};
for (int i = 0; i<a ; i++){
b[i] = a;
cout << b[i];
}
return 0;
}
如果我输入5
输出:
55555
它以某种我无法在dev c ++中理解的方式正常工作。如果我在Visual Studio 2017中运行此程序,则会出现错误。谁能解释为什么?
答案 0 :(得分:0)
正如我在c ++中所知道的,如果要创建数组,必须为其数组大小提供恒定值。
正确。如果使用非恒定值,则程序格式错误。是的,您显示的程序格式错误。
它以我无法理解的方式运作良好……任何人都可以解释为什么吗?
C ++编译器可能允许编译格式错误的程序。这使编译器可以扩展语言。看来您在使用C ++的非标准扩展。
这是GCC编译器对您的程序的评价:
warning: ISO C++ forbids variable length array 'b' [-Wvla] int b[a] = {}; ^
答案 1 :(得分:0)
您是否有机会使用GCC?这是GCC扩展名,默认情况下启用。实际上,这是很危险的,因为它很容易在程序上引起堆栈溢出。大致与使用alloca()
相同。
要禁用它,您应该使用名为-Wpedantic
的编译器标志。这将使您的编译器发出警告。 (see this demonstration)
ISO C ++禁止使用可变长度数组'b'[-Werror = vla]