如何初始化D2中的const值数组?

时间:2010-09-02 12:24:01

标签: arrays initialization const-correctness d

基本上,我希望能够做到这样的事情:

struct Foo
{
  const(int)[2] ints;

  this(int x, int y)
  {
    ints = [x, y];
  }
}

但这不起作用。编译器(DMD 2.048)只是抱怨ints不可变。

你应该如何初始化数组?

1 个答案:

答案 0 :(得分:1)

一种方法是以这种方式实现构造函数:

  this(int x, int y) 
  {
    auto i2 = cast(int[2]*)&ints;
    *i2 = [x, y];
  }

const是只读视图,因此构造函数创建可变视图i2并分配给它。我真的不喜欢第一行中的强制转换,也许std lib中有一些函数封装了强制转换并从变量类型中删除了const修饰符,所以这可以用安全和惯用的方式表达。

第二种方法是使ints变为可变和私有,然后提供公共访问者功能:

struct Foo {

  private int[2] _ints;

  this(int x, int y) {
      _ints = [x, y];
  }

  @property ref const(int)[2] ints () {
      return _ints;
  }
}

编译器可能能够内联它。