在D中,immutable是传递性的,因此禁止对任何不可变结构域进行赋值.据我所知,永远不变的结构变量永远不会被改变,而且它的内容也是如此.
但是,如果我宣布这样的事情怎么办?
struct OpaqueData;
immutable(OpaqueData*) data;
Run Code Online (Sandbox Code Playgroud)
D如何保证在D中没有实现并且可能具有间接性的结构的传递不变性?
什么是在不可变类中封装这种指针到不透明数据的正确方法?
小智 5
由于您不知道任何字段OpaqueData,因此您无法首先分配任何字段.
当然,你可以通过抛弃完全打破类型系统immutable(D确实赋予你这样做的权力)并将原始记忆分配给一个OpaqueData*值指向,但是你要求你最终会遇到什么问题如果你不这样做并尊重你的OpaqueData指针immutable,你就不能以任何方式改变它,因为类型限定符的传递性质.
事实上,这是他们的全部观点:它们在数学上是合理的.