【发布时间】:2015-11-18 03:05:09
【问题描述】:
我一直在尝试使用 const 作为类声明中数组的大小。我知道如果我使用静态常量,它会起作用,但我很难理解为什么。更具体地说,为什么我可以对类中的某些数据成员使用 const,而对其他数据成员必须指定静态 const,如下所示:
class Test
{
public:
static const int size = 10; // 1. Works. Must be static to use it as size of array
const int alpha = 20; // 2. Works, but cannot use as size of an array
const double beta = 10.0; // 3. Works
static const double gamma = 20.0; // 4. does not compile
int table[size]; // Works with size, but not alpha
};
我已经阅读了很多解释,但还没有找到一个(或至少一个我理解的)专门针对案例 1 与案例 4 的不同之处,以及为什么我需要为数组设置 const 静态。
有人能解释一下吗?
编辑:我正在使用 VS 2013,如果这有影响的话
【问题讨论】:
-
数组的大小必须在编译时确定,因此必须在数组声明中使用静态值。
-
在使用 a const int would work 的类之外,但在类主体中,它并不是真正的 const,因为您在构造函数中对其进行了初始化,因此值可以与
size不同。 -
案例 4 使用
double。数组大小必须是整数。不过,一个 2.5 元素的数组会很有趣。就像平均有 2.5 个孩子的家庭一样。 -
除了愚蠢的cmets,这是一个有趣的。我不知道为什么
static const int有效但static const double无效。可能需要等待语言律师办理入住。 -
@Shafik 这是正确的答案,但他的 OP 可能需要解释为什么以这种方式初始化的非静态变量在编译时实际上不是 const。