【问题标题】:How to initialize const size array in constructor without explicitly stating the size in class declaration?如何在构造函数中初始化 const 大小数组而不在类声明中明确说明大小?
【发布时间】:2017-09-01 10:09:07
【问题描述】:

我需要做类似的事情

class foo {
  foo();
  int a[];
}

在 cpp 文件中的进一步说明:

foo::foo() : a{1,2,3,4} {}

特点:

  1. C++98 标准

  2. array 不是 int,初始化列表要长得多。虽然它的值在编译时是已知的,但它们可能会不时改变

编辑:当new[] 用于内存分配时,另一个选项也是合适的,但是,再次明确说明数组大小是不可取的:

class foo {
  foo();
  int * a;
}

在 cpp 文件中的进一步说明:

foo::foo() {
  a = new[]; // impossible
  // filling the array with values
}

【问题讨论】:

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

标签: c++ c++98


【解决方案1】:

你不能这样做:数组的大小是数组的类型的一部分,因此也是类的一部分。构造函数也是类的一部分。类需要先存在才能调用构造函数,所以构造函数调用不能影响类定义。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多