为什么我们不能在全局区域(outside main())使用非const大小初始化数组大小?
//outside main - global
int val=5;
int arr[val];
int main()
{
}
这会导致错误。
7:12: error: array bound is not an integer constant before ']' token
In function 'int main()':
但是,如果将相同的代码移动到函数主体/正文中,则错误消失......
没有错误,可以编译正常......
int main()
{
int val=5;
int arr[val];
}
同样,它可以在函数体内正常工作。
void fn(int val)
{
int arr[val];
}
int main()
{
fn(5);
}
为什么移动数组的大小只能在main函数外初始化会让人感到困惑?
int* arr = new int(val)
。 - suzuiyuefn
没有对 VLA 做任何事情;编译器可能会删除该数组(尽管如果优化掉数组,则在将负值或零值传递给val
时可能无法获得应该出现的错误)。 - Jonathan Lefflerc++
中使用std::vector
即可。 - drescherjmval
,是吗?我认为C++中相当于定义一个包含val
个整数的数组应该更像是int *arr = new int[val];
——假设你使用了new
(或者更确切地说是new[]
)。现代C++会避免使用所有这些符号。 - Jonathan Leffler