我试图在全局范围内声明一个具有const值的数组,如下所示。但它给出了编译错误,说数组大小不是const值。
const int a[] = {1, 2, 3, 4, 5};
int arr[a[1]];
但是如果我将相同的行复制到一个函数中,它工作正常。
当我尝试声明全局数组时,能告诉我这些差异及其失效的原因。
答案 0 :(得分:4)
如果您的编译器支持C ++ 2011 Standard的新说明符constexpr
,请尝试
constexpr int a[] = {1, 2, 3, 4, 5};
int arr[a[1]];
至于在将代码放入函数时编译代码,那么这样的代码不符合C ++。它是您正在使用的编译器的语言扩展。数组的大小应该是编译时已知的常量表达式。
在C中,您可以使用可变长度数组(VLA)。一些编译器在C ++中包含了C标准的这一特性。