gpt4 book ai didi

constants - D中的const和不可变有什么区别?

转载 作者:行者123 更新时间:2023-12-03 12:10:01 25 4
gpt4 key购买 nike

D中的constimmutable类型限定符有什么区别?

最佳答案

const之类的内容无法通过该引用进行更改,但可以通过对相同数据的可变引用进行更改。对该数据的任何引用都不能使immutable某些内容发生突变。所以,如果你有

const C c = foo();

那么您就知道您无法通过 c更改 c所引用的对象,但是您的代码中可能存在对 c所引用的对象的其他引用,并且如果它们是可变的,则可以对其进行更改,从而更改 c看到的内容。但是如果你有
immutable C c = foo();

那么您知道 c所引用的对象是不可能更改的。构造 immutable对象后,对其进行突变是非法的,并且除非您通过强制转换来破坏类型系统,否则甚至不可能对 immutable对象进行可变引用。并且由于编译器选择将 immutable对象放入只读存储器,因此,如果您尝试抛弃 immutable并对其进行变异,则实际上可能会遇到段错误。 const也是如此,因为 const引用实际上可以引用 immutable对象。抛弃 constimmutable,然后对当时可变的对象进行突变是未定义的行为,并且基本上不应该这样做。

而且,由于 immutable对象甚至不能被另一个引用更改,因此从多个线程读取 immutable对象是完全线程安全的。因此, immutable对象在线程之间隐式共享,而其他未使用 shared明确标记的其他对象都被视为线程本地的。与 immutable相比, const还为编译器提供了更好的优化机会,因为可以保证它永远不会改变,而 const对象可以通过对同一数据的另一个引用进行改变。

对于值类型, constimmutable之间并没有太大区别(因为您不能对非可变值类型进行可变引用),但是对于引用类型,则存在显着差异。

关于constants - D中的const和不可变有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17115900/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com