C++ 如何在构造函数中初始化常量大小数组,而不在类声明中显式声明大小?

C++ 如何在构造函数中初始化常量大小数组,而不在类声明中显式声明大小?,c++,c++98,C++,C++98,我需要做一些类似的事情 class foo { foo(); int a[]; } 进一步在cpp文件中: foo::foo() : a{1,2,3,4} {} foo::foo() { a = new[]; // impossible // filling the array with values } 特点: C++98标准 数组不是int,初始化列表要长得多。虽然它的值在编译时是已知的,但它们可以随时更改 编辑:当new[]用于内存分配时,另一个选项也适用,但同样,不

我需要做一些类似的事情

class foo {
  foo();
  int a[];
}
进一步在cpp文件中:

foo::foo() : a{1,2,3,4} {}
foo::foo() {
  a = new[]; // impossible
  // filling the array with values
}
特点:

  • C++98标准

  • 数组不是int,初始化列表要长得多。虽然它的值在编译时是已知的,但它们可以随时更改

  • 编辑:当
    new[]
    用于内存分配时,另一个选项也适用,但同样,不希望明确说明数组大小:

    class foo {
      foo();
      int * a;
    }
    
    进一步在cpp文件中:

    foo::foo() : a{1,2,3,4} {}
    
    foo::foo() {
      a = new[]; // impossible
      // filling the array with values
    }
    

    不能这样做:数组的大小是数组类型的一部分,因此也是类的一部分。构造函数也是类的一部分。类必须先存在,然后才能调用构造函数,因此构造函数调用不能影响类定义。

    初始化列表是在C++11使用数组大小的类模板作为参数或仅使用std::vector之前添加的。@Jerfov2是的,但可以编写
    int a[]={1,2,3,4}
    ,这正是我所需要的,除了在这种情况下数组应该是静态的或本地的。如果你能按照你的要求做,那么
    sizeof(foo)
    会是什么?