这个C++代码是否正确?
const size_t tabsize = 50; int tab[tabsize];
问题是我已经看到了很多关于这件事的相互矛盾的意见.即使是## c ++ IRC频道和节目论坛的人也要求完全不同的东西.
有人说上面的代码是正确的.
其他人认为它不是,它应该是这样的:
constexpr size_t tabsize = 50; int tab[tabsize];
由于我对"C++专家"的观点存在冲突已经足够困惑,我可以请一个合理的备份答案吗?非常感谢!
在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整数变量作为数组的大小,如果它是由编译时常量表达式初始化的
这是我对另一个问题的回答.这个问题是关于int
vs float
const
和constexpr
,所以不完全是重复,但答案非常适用.