使用常量表达式声明数组

3

我试图在全局范围内以以下方式声明一个具有const值的数组。但是它会给出编译错误,说数组大小不是一个const值。

const int a[] = {1, 2, 3, 4, 5};

int arr[a[1]];

但是,如果我将相同的代码行复制到一个函数中,它就可以正常工作。

请问您能否告诉我两种方法之间的区别,以及为什么在尝试声明全局数组时它不起作用。

1个回答

4
如果您的编译器支持C++ 2011标准中的新限定符constexpr,请尝试使用。
constexpr int a[] = {1, 2, 3, 4, 5};

int arr[a[1]];

如果您将代码放在函数中编译,则此类代码不符合C ++标准。这是您使用的编译器的语言扩展。数组的大小应为在编译时已知的常量表达式。

在C语言中,您可以使用可变长度数组(VLA)。一些编译器在C ++中包含了此C标准的功能。


谢谢 Vlad。我在网上读到过,在C++中,数组大小必须是常量表达式,而不仅仅是常量数据。所以a[1]不是一个常量表达式。但我不明白什么是常量表达式。它是否意味着表达式给出了常量值。如果是这样的话,根据我的理解,a[1]也应该给出常量值。你能告诉我什么是常量表达式吗? - kadina
@kadina 这是一个复合问题。你只需要知道使用 constexpr 限定符定义的对象在编译时进行求值,编译器可以在数组定义中使用这些值。 - Vlad from Moscow

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接