数组大小声明问题

时间:2014-12-29 13:55:02

标签: c++

int n=5;
int arr[n];

我想在C ++中声明上面的数组大小,但是在编译时我遇到了错误。我在互联网上发现很多代码使用这些类型的声明而不是简单的放置int arr[5]。为什么代码为他们成功编译但不适合我。 P.S:我使用的是windows7和Visual Studio(IDE)。

错误消息:Expresion必须具有常量值

2 个答案:

答案 0 :(得分:3)

数组的元素数量(数组绑定)必须是常量表达式。

你必须使用

const int n = 5;

constexpr int n = 5;

否则它是非标准扩展名:可变长度数组(VLA)。

答案 1 :(得分:3)

错误消息实际上描述了正在发生的事情:C ++不支持具有非常量大小的数组(更确切地说,大小需要在编译时知道)。

有两种解决方案:

  1. 如果大小实际上是常量,请将其声明为constexpr(如果您不能使用C ++ 11,也可以使用const):

    constexpr int n = 5;
    std::array<int, n> arr;
    

    这需要标准标题<array>。或者,如果您不能使用C ++ 11,请将第二行更改为

    int arr[n];
    
  2. 如果在编译时未知大小,请不要使用静态数组,而是使用动态容器:

    int n = 5;
    std::vector<int> arr(n);
    

    这需要<vector>标准标题。