我试图在全局范围内以以下方式声明一个具有const值的数组。但是它会给出编译错误,说数组大小不是一个const值。
const int a[] = {1, 2, 3, 4, 5};
int arr[a[1]];
但是,如果我将相同的代码行复制到一个函数中,它就可以正常工作。
请问您能否告诉我两种方法之间的区别,以及为什么在尝试声明全局数组时它不起作用。
我试图在全局范围内以以下方式声明一个具有const值的数组。但是它会给出编译错误,说数组大小不是一个const值。
const int a[] = {1, 2, 3, 4, 5};
int arr[a[1]];
但是,如果我将相同的代码行复制到一个函数中,它就可以正常工作。
请问您能否告诉我两种方法之间的区别,以及为什么在尝试声明全局数组时它不起作用。
constexpr
,请尝试使用。constexpr int a[] = {1, 2, 3, 4, 5};
int arr[a[1]];
如果您将代码放在函数中编译,则此类代码不符合C ++标准。这是您使用的编译器的语言扩展。数组的大小应为在编译时已知的常量表达式。
在C语言中,您可以使用可变长度数组(VLA)。一些编译器在C ++中包含了此C标准的功能。