当前位置:  开发笔记 > 编程语言 > 正文

为什么从Java和C#中删除const?

如何解决《为什么从Java和C#中删除const?》经验,为你挑选了2个好方法。

我知道这已经多次讨论了,但我不确定我是否真的理解为什么 Java和C#设计者选择从这些语言中省略这个功能.我对如何制定变通方法(使用接口,克隆或任何其他替代方法)不感兴趣,而是对决策背后的基本原理感兴趣.

从语言设计的角度来看,为什么这个功能被拒绝了?

PS:我正在使用诸如"省略"之类的词语,有些人可能觉得这些词语不合适,因为C#是用加法(而不是减法)方法设计的.但是,我使用这样的词是因为在设计这些语言之前C++中存在这个特性,所以从程序员的工具箱中删除它就省略了.



1> BobbyShaftoe..:

在这次采访中,安德斯说:

Anders Hejlsberg:是的.关于const,它很有意思,因为我们也一直听到这样的抱怨:"为什么你没有const?" 问题隐含的是,"为什么你没有运行时强制执行的const?" 这正是人们所要求的,尽管他们并没有这样说出来.

const在C++中工作的原因是因为你可以把它丢弃.如果你不能把它扔掉,那么你的世界就会糟透了.如果声明一个采用const Bla的方法,则可以将它传递给非const Bla.但如果是相反的方式你不能.如果声明一个采用非const Bla的方法,则不能将它传递给const Bla.所以现在你被卡住了.所以你逐渐需要一个不是const的所有东西的const版本,你最终得到了一个阴影世界.在C++中,你可以使用它,因为与C++中的任何东西一样,无论你是否想要这个检查,它都是纯粹可选的.如果你不喜欢它,你可以打破常量.


这可能是一个警察,因为他知道的更好.如果你正确地声明了一个foo(Bla&),那是有原因的:它修改了Bla.你不添加foo(Bla const&)因为它无法工作.如果foo accidentily被声明(Bla&)但它没有修改Bla,你可以安全地添加const.不需要过载.

2> Marc Gravell..:

我猜主要是因为:

它无法正确执行,即使在C++中(你可以强制转换)

底部的单个const可以强制调用树中的整个const链

两者都有问题.但特别是第一个:如果不能保证,它有什么用?更好的选择可能是:

不可变类型(完全不变性或冰棒不变性)

推荐阅读
牛尾巴2010
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有