为什么C ++类型默认不是const?

时间:2013-10-20 13:40:05

标签: c++

除非我们需要对其进行修改,否则大家到处告诉我们const所有内容,但标准会使所有内容变为可变,直到我们声明它为const

我在这里遗漏了什么,或者这是一个矛盾吗?根据专家(其中一些人可能设计标准),默认情况下为什么不是C ++类型const,默认情况下它们应该制作 const

3 个答案:

答案 0 :(得分:13)

  

无处不在的大师告诉我们const 除非我们需要修改它,

这对有意义。不变性是一个非常高尚的想法。

Rust是一种新语言(由Mozilla开发),默认情况下,变量是 immutable 。如果你希望你的变量是可变的,那么你必须使用与C ++完全相反的关键字mut明确地使它成为 mutable - 在C ++中,你必须使用关键字const明确地创建 immutable ,否则默认情况下它们是 mutable

特别是随着多核处理器和更多多线程软件的出现,它让我感觉更加。我认为默认情况下应该有更多的限制,并且应该有意识地和明确地(而不是隐含地)解除限制(当你需要时)。例如,默认情况下,类的成员为private;默认情况下,继承为private。您明确指定publicprotected。那么应该是 the-right-to-modify 变量的情况。默认情况下(我认为)您无权修改变量。它需要一点成熟才能理解不变性/限制 - 通过限制,你可以避免软件中的一类错误。这是我的想法,支持声明。

现在回到实际问题,

  

为什么C ++类型默认不是const,根据const-people,它们应该默认为const?

这是因为

  • 没有多少程序员意识到不变性(作为默认值)使他们的生活变得轻松,因为它是一种新趋势,至少它最近才迎头赶上。
  • 后向兼容性。 C默认具有可变类型。

答案 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

请注意,这只是一个练习,我不会在制作中使用它。