const
所有内容,但标准会使所有内容变为可变,直到我们声明它为const
。
我在这里遗漏了什么,或者这是一个矛盾吗?根据专家(其中一些人可能设计标准),默认情况下为什么不是C ++类型const
,默认情况下它们应该制作 const
?
答案 0 :(得分:13)
无处不在的大师告诉我们const 除非我们需要修改它,
这对我有意义。不变性是一个非常高尚的想法。
Rust是一种新语言(由Mozilla开发),默认情况下,变量是 immutable 。如果你希望你的变量是可变的,那么你必须使用与C ++完全相反的关键字mut
明确地使它成为 mutable - 在C ++中,你必须使用关键字const
明确地创建 immutable ,否则默认情况下它们是 mutable 。
特别是随着多核处理器和更多多线程软件的出现,它让我感觉更加。我认为默认情况下应该有更多的限制,并且应该有意识地和明确地(而不是隐含地)解除限制(当你需要时)。例如,默认情况下,类的成员为private
;默认情况下,继承为private
。您明确指定public
或protected
。那么应该是 the-right-to-modify 变量的情况。默认情况下(我认为)您无权修改变量。它需要一点成熟才能理解不变性/限制 - 通过限制,你可以避免软件中的一类错误。这是我的想法,支持声明。
现在回到实际问题,
为什么C ++类型默认不是const,根据const-people,它们应该默认为const?
这是因为
答案 1 :(得分:13)
除非我们需要修改它,否则无处不在的大师会告诉我们const,
这是十年或两年的传统智慧,是的。
然而标准使一切都变得可变,直到我们声明为const。
该标准是从大约五十年前开发的语言发展而来的,当时,正确性,甚至类型检查在很大程度上被认为只是学术上的兴趣。
我在这里遗漏了什么,或者这是一个矛盾吗?
这不是矛盾;只是一种语言不起作用,有些人会说它应该如何。你仍然可以(并且应该)在适当的时候宣布const
,我们只需要忍受一种不会促使我们走向安全实践的语言。
默认情况下,为什么不是C ++类型
const
?
因为改变语言的这一基本方面会破坏所有现有代码。这比稍微减少错误的范围要大得多。
答案 2 :(得分:1)
几年前我有同样的问题,我写了一些辅助函数来使const变量的使用更简洁。
你可以在这里看到它: https://github.com/pthom/cpp_terse_const
我在stackechange的codereview上的帖子: https://codereview.stackexchange.com/questions/106074/const-by-default
请注意,这只是一个练习,我不会在制作中使用它。