这个C ++代码是否正确?
const size_t tabsize = 50;
int tab[tabsize];
问题在于我已经看到了很多关于此事的相互矛盾的意见。即使是## c ++ IRC频道和编程论坛的人也要求完全不同的东西。
有人说上面的代码是正确的。
其他人认为它不是,它应该是这样的:
constexpr size_t tabsize = 50;
int tab[tabsize];
由于我对“C ++专家”的观点存在冲突已经足够困惑了,我可以请一个合理的备份答案吗?非常感谢!
答案 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。该问题与int
与float
const
和constexpr
有关,因此不完全相同,但答案非常适用。