可能无法初始化可变大小的对象

sta*_*rdt 5 c++ arrays

我有这样的课

class aClass
{
  public:
    aClass() : N(5) {}
    void aMemberFunction()
    {
      int nums[N] = {1,2,3,4,5};
    }
  private:
    const int N;
};
Run Code Online (Sandbox Code Playgroud)

测试代码是

int main()
{
  aClass A;
  A.aMemberFunction();

  const int N = 5;
  int ints[N] = {5,4,3,2,1};
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

当我编译(g ++ 4.6.2 20111027)时,我收到错误

problem.h: In member function ‘void aClass::aMemberFunction()’:
problem.h:7:31: error: variable-sized object ‘nums’ may not be initialized
Run Code Online (Sandbox Code Playgroud)

如果我注释掉行,int nums[N]我没有得到编译错误,所以ints数组的类似代码是好的.N编译时是否知道值?

这是怎么回事?为什么被nums认为是一个可变大小的数组?为什么数组numsints处理方式不同?

Fer*_*yer 9

N编译时是否知道值?

aMemberFunction编译时,编译器现在不是什么N,因为它的值是在运行时确定的.看到只有一个构造函数并假设其值N可能不同于5 ,这是不够智能的.