为什么默认情况下C++类型不是常量?



各地的大师都告诉我们const所有东西,除非我们需要修改它,但标准使所有东西都是可变的,直到我们声明const

我是错过了什么,还是矛盾?为什么C++类型不是默认的const,而根据专家(其中一些人可能设计了标准(的说法,它们应该是默认的const

各地的大师都告诉我们,除非我们需要修改,否则要对一切进行const,

是的,这是一二十年来的传统智慧。

然而,在我们将其声明为const之前,该标准使所有内容都是可变的。

该标准是从大约50年前开发的语言演变而来的,当时常量正确性,甚至类型检查,在很大程度上被认为只是学术兴趣。

我是错过了什么,还是矛盾?

这不是矛盾;只是一种不起作用的语言。你仍然可以(也应该(在适当的时候声明const,我们只需要忍受一种不会把我们推向安全实践的语言。

为什么默认情况下C++类型不是const

因为更改语言的这样一个基本方面将破坏几乎所有现有的代码。这是一个比稍微减少错误范围更令人担忧的问题。

各地的大师都告诉我们,除非我们需要修改它,否则要对所有东西进行const

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

Rust是一种新语言(由Mozilla开发(,默认情况下,其中的变量是不可变的。如果您希望变量是可变的,则必须使用关键字mut显式地使其可变,这与C++的作用完全相反—在C++中,必须使用关键字const显式地使不可变,否则默认情况下它们是可变的

特别是随着多核处理器和比以往任何时候都多的多线程软件的出现,这让对我来说都更有意义。我认为默认情况下应该有更多的限制,并且应该有意识地、明确地(而不是隐式地(取消限制(当你需要的时候(。例如,一个类的成员默认为private;继承默认为CCD_ 10。显式地将它们设为publicprotected。因此,有权修改变量。默认情况下(在我看来(,您不应该有权修改变量。它需要一点成熟才能理解不变性/限制性—通过设置限制,可以避免软件中出现一整类错误。这是我支持该声明的想法。

现在回到实际问题,

为什么C++类型在默认情况下不是const,而根据const人员的说法,它们应该在默认情况下作const?

这是因为

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

几年前我也遇到过同样的问题,我编写了一些辅助函数来使const变量的使用更加简洁。

你可以在这里看到:https://github.com/pthom/cpp_terse_const

我在stackechange上的代码审查帖子:https://codereview.stackexchange.com/questions/106074/const-by-default

小心,这只是一个演习,我不会在生产中使用这个。

最新更新