2

在 D 中,immutable是可传递的,因此禁止对不可变结构的任何字段赋值。据我了解,强烈保证不可变结构变量永远不会改变,它的所有内容也是如此。

但是,如果我宣布了这样的事情呢?

struct OpaqueData;
immutable(OpaqueData*) data;

D 如何保证未在 D 中实现且可能具有间接性的结构的传递不变性?

将这种指向不透明数据的指针封装在不可变类中的正确方法是什么?

4

1 回答 1

5

由于您不知道 中的任何字段OpaqueData,因此您首先不能分配给它的任何内容。

当然,您可以通过抛弃immutable(D 确实赋予您这样做的能力)并将OpaqueData*值指向的原始内存分配给原始内存来完全破坏类型系统,但是您会要求解决最终会遇到的任何问题with... 如果您不这样做并且尊重您的OpaqueData指针是immutable,则由于类型限定符的传递性,您不能以任何方式更改它。

事实上,这就是它们的全部意义所在:它们在数学上是合理的。

于 2012-04-08T21:20:30.150 回答