【发布时间】:2020-02-06 21:41:05
【问题描述】:
在 C++ 中,可以使用 const 关键字来指示指向数据的指针或数据本身是否为常量(或两者兼有),即
const SomeClass* p; // 数据不变
或
SomeClass* const p; // 指针是常量
或
const SomeClass* const p; // 两者都是常量
在 Java 中,final 关键字受到更多限制:
final SomeClass o; //引用是常量,对象可以改变
我一直想知道为什么 Java 在这方面比 C++ 更受限制。这是语言设计者做出的决定(也可能是其他决定),还是有技术原因阻止它?
Java 对象由垃圾收集器管理这一事实是否有影响?
【问题讨论】:
-
我从未标记过要迁移到 cs.stackexchange.com 的任何内容,但我想知道这个问题是否更适合那里。
-
@Kayaman:我改了措辞
-
我不认为可以用有意义的方式回答这个问题。既然 C++ 有它,就不可能有一个纯粹的技术理由阻止在另一种语言中使用这个特性。显然,这是可能的,但生成的语言将是不同的语言,其他功能可能会受到影响。但这对于每个设计决策都是正确的,因此允许看起来该决策仍算作 设计 而不是 技术 决策的语言有何不同?
-
const确实影响功能。这会影响重载解析(因此,在 C++ 中,双 getter,iterator和const_iterator)。复杂性/安全性的权衡或许可以解释为什么某些语言拥有它而其他语言没有或部分没有。