5

在许多现代语言中const,应该使用正确性来阐明接口和意图,并为编译器提供一些优化的机会。在 D 中有真正不可变数据的酷特性。应该如何const使用immutable?我有点想,更喜欢const作为函数参数和immutable局部变量的限定符似乎是编写代码的好方法,但是一旦你想将一个带有引用或指针的结构分配给一个数据成员(私有或非私有)不可变变量你不能这样做。

struct S {
    private int[] data;
}

void main() {
    immutable s = new S; // won't work, since members aren't immutable
}

因此,struct如果我使用不可变的,更改 a 的实现可能会破坏我的代码。我是否应该更喜欢const局部变量并仅在必要时使用不可变?指导方针是什么?

4

1 回答 1

6

你非常幸运 - 上周发布了来自 DConf2013 的视频,其中专门针对该主题进行了演示:http: //youtu.be/mPr2UspS0fE

在你的情况下,auto s = new immutable(S)();应该做的伎俩。然后,您可以在构造函数中创建数据切片点。但是,如果这个切片可能指向任何数据,那么 S 不可能是不可变的,因为constimmutable在 D 中都是可传递的——它们不仅为变量本身提供了非常强的保证,而且还为可以从中间接访问的任何数据提供了非常强的保证通过参考/指针。

它实际上包含在链接的视频中,但简短的总结是您想在真正打算使用时使用不可变的。换句话说,当您希望您的代码在实现更改时中断,S从而使不可变保证不再有效。

于 2013-05-15T09:33:40.177 回答