如何在D中声明指向非常量/可变数据的const指针?

Cec*_*ard 5 pointers d const immutability variable-declaration

在D中,如何在D中声明指向非常量/可变数据的const或不可变指针?

dlang网站说您不能仅仅将其声明为const,因为这会使指针const及其指向的数据都不可修改。

我已经阅读了与此相关的较早的帖子,表明这根本是不可能的。如果是这样,那么这就是语言设计中的一个大漏洞。应该有可能单独声明指针为不可修改的指针,否则这是疯狂的。使const从指针传播到也隐含const数据可能是有用的默认安全功能。

Jon*_*vis 5

你不知道 在d, ,constimmutableshared都传递。因此,一旦类型的外部是const(或immutableshared),整个类型就是。在一个点上,非常的D2早,语言有两个头const和尾const,但它被认为太复杂,是值得的,并且它已被删除(早在2.015版本IIRC)。因此,现在constimmutableshared都是完全可传递的,并且这种方式已经存在很多年了。

你可以声明像

const(int)* p;
Run Code Online (Sandbox Code Playgroud)

因此该类型的内部是const,但是没有办法表明外部也const没有在其中进行任何设置const

因此,是的,您要尝试执行的操作在D中是不可能的,这可能不如理想情况灵活,但head const也是最有用的形式const。因此,据我所知,虽然这可能是一个损失,但实际上并不是很大。并允许头const真正复杂的事情-尤其是当immutableshared发挥了作用。因此,当前的系统要简单得多,而且不会损失很多功率,因此可以说是一个很好的折衷方案。

如果您确实想要诸如head之类的东西const,则可以始终创建一个不允许分配的包装器类型,但这是您将获得的最接近的包装器类型。