如何在类中使用常量类变量声明常量数组?

Uza*_*ooq 3 c++ arrays variables class constants

如何在类中使用常量类变量声明常量数组?可能吗.我不想要动态数组.

我的意思是这样的:

class test
{
    const int size;
    int array[size];
    public:
    test():size(50)
    {}
}

int main()
{
    test t(500);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

上面的代码给出了错误

Ker*_* SB 5

不,这是不可能的:只要size是动态变量,array[size]就不可能实现为静态数组.

如果您愿意,可以这样考虑:sizeof(test)必须在编译时知道(例如考虑数组test).但是sizeof(test) == sizeof(int) * (1 + size)在您的假设示例中,这不是编译时已知的值!

你可以size进入模板参数; 这是唯一的解决方案:

template <unsigned int N>
class Test
{
  int array[N];
  static const unsigned int size = N; // unnecessary really
public:
  // ...
};
Run Code Online (Sandbox Code Playgroud)

用法: Test<50> x;

请注意,现在我们有sizeof(Test<N>) == sizeof(int) * (1 + N),这实际上是一个编译时已知值,因为每个N,Test<N>是一个独特的类型.