是否可以使用const变量而不是constexpr来声明数组?

时间:2016-01-09 17:32:02

标签: c++ arrays const

这个C ++代码是否正确?

const size_t tabsize = 50;
int tab[tabsize];

问题在于我已经看到了很多关于此事的相互矛盾的意见。即使是## c ++ IRC频道和编程论坛的人也要求完全不同的东西。

有人说上面的代码是正确的。

其他人认为它不是,它应该是这样的:

constexpr size_t tabsize = 50;
int tab[tabsize];

由于我对“C ++专家”的观点存在冲突已经足够困惑了,我可以请一个合理的备份答案吗?非常感谢!

1 个答案:

答案 0 :(得分:10)

在C ++中,常量整数的处理方式与其他常量类型不同。如果使用编译时常量表达式初始化它们,则可以在编译时表达式中使用它们。这已经完成(在C++开始时,constexpr不存在时),因此数组大小可能是const int而不是#define d(就像你被迫一样)在C):

(假设没有VLA扩展名)

const int s = 10;
int a[s];          // OK in C++

const int s2 = read(); // assume `read` gets a value at run-time
int a2[s2];       // Not OK

int x = 10;
const int s3 = x;
int a3[s3];       // Not OK

所以答案是肯定的,你可以使用const整数变量作为数组的大小如果它是由编译时常量表达式初始化的

这是另一个问题的my answer。该问题与intfloat constconstexpr有关,因此不完全相同,但答案非常适用。