基本上,我希望能够做到这样的事情:
struct Foo
{
const(int)[2] ints;
this(int x, int y)
{
ints = [x, y];
}
}
但这不起作用。编译器(DMD 2.048)只是抱怨ints
不可变。
你应该如何初始化数组?
答案 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;
}
}
编译器可能能够内联它。