声明具有声明常量的数组

时间:2013-09-09 21:24:20

标签: c++ arrays

我正在尝试做这样的事情:

const int array_size = 5;
string stuff[array_size];

即使array_size是常量,我的编译器也不会让我编译它。有没有办法在不处理动态数组的情况下做到这一点?

编辑:“错误C2057:预期的常量表达”

5 个答案:

答案 0 :(得分:5)

  

我已经回答了这个问题,假设您要么使用C或C ++进行编码。如果您使用的是其他语言,则此答案不适用。但是,您应该使用您尝试使用的语言更新问题。

考虑以下计划:

int main () {
    const int size = 5;
    int x[size];
    return 0;
}

这将在C ++和C.99中编译,但不能在C.89中编译。在C.99中,引入了可变长度数组,因此局部范围的数组可以采用由变量指定的大小。但是,C.99中文件范围的数组不能采用可变大小参数,而在C.89中,所有数组定义都必须具有非可变大小。

如果您使用C.89,或在C.99中定义文件范围数组,则可以使用enum来命名常量值。然后可以使用enum来调整数组定义的大小。但这对于C ++来说不是必需的,它允许使用由文字初始化的const整数类型来调整数组声明的大小。

enum { size = 5 };
int x[size];
int main () { return 0; }

答案 1 :(得分:0)

#define array_size 5
string stuff[array_size];

答案 2 :(得分:0)

您可以使用例如vectornew关键字动态分配内存,因为声明的数组不能具有运行时大小。

答案 3 :(得分:0)

我唯一能想到的是你在代码中定义了另一个array_size变量,它不是编译时常量并且隐藏了原始的array_size

答案 4 :(得分:-1)

array_size不被视为编译时常量。添加的Constness只是确保程序员无法修改它。如果试图意外修改,编译器会引起你的注意。

数组的大小需要是编译常量。好像您的编译器不支持Variable Length Array。您可以#define数组的大小,而不是被视为常量表达式。