Jon*_*vis 17
某些东西const不能通过该引用进行变异,但可以通过对相同数据的可变引用进行变异.任何对该数据的引用immutable都无法改变的东西.所以,如果你有
const C c = foo();
Run Code Online (Sandbox Code Playgroud)
然后你就知道你不能改变c通过c引用的对象,但是c你的代码中可能存在对引用的对象的其他引用,如果它们是可变的,它们可能会改变它,从而改变c看到的内容.但如果你有
immutable C c = foo();
Run Code Online (Sandbox Code Playgroud)
然后你知道所引用的对象不可能c改变.一旦immutable构造了一个对象,它就会被改变是非法的,除非你通过强制转换来破坏类型系统,否则它甚至不可能有一个immutable对象的可变引用.而且,immutable如果编译器选择将对象放入只读内存中,那么如果你试图抛弃immutable并改变对象,你实际上可以获得段错误等.同样的const,因为const引用实际上可以引用一个immutable对象.抛弃任何一个const或immutable然后变异然后变异的可变对象是未定义的行为,基本上应该永远不会完成.
并且由于immutable对象永远不会被另一个引用变异,因此immutable从多个线程读取对象是完全线程安全的.因此,immutable跨线程隐式地共享对象,而未明确标记的所有其他内容shared被认为是线程本地的.immutable也为编译器提供了更好的优化机会const,因为它保证永远不会改变,而const对象可以通过对同一数据的另一个引用来改变.
对于值类型,const和之间没有太大区别immutable(因为您不能对非可变值类型进行可变引用),但对于引用类型,存在显着差异.
| 归档时间: |
|
| 查看次数: |
1975 次 |
| 最近记录: |