gpt4 book ai didi

c++ - 命名空间中的变量如何优于全局变量

转载 作者:太空宇宙 更新时间:2023-11-04 11:41:10 26 4
gpt4 key购买 nike

我们都知道要避免使用全局变量,但是将它们放在命名空间中是解决方案还是同一问题的另一种形式?在命名空间中拥有任何人都可以访问和更改的数组之类的东西仍然不好吗?
当你有一个变量时有没有其他选择:

  • 不属于现有类(class)的
  • 需要被多个现有类使用
  • 不需要为每次使用都创建一个实例(它们应该都修改同一个)

如果需要更多像这个都与同一个想法相关的变量,命名空间可以使理解变得更容易。它们还使跟踪变得更容易。这些是唯一让他们比拥有全局性更好的东西吗?我不是想淡化它们的重要性,只是好奇。
仔细想一想,在C#中全局静态类成员基本上和这个场景是一样的。

编辑:毕竟为它创建了一个新类(并像往常一样通过 ref 传递它)。它有可能增长,所以我觉得这个类(class)很好。另外,在写出命名空间之后,对于这种情况,它感觉像是一个糟糕的解决方案。

最佳答案

全局变量(至少)存在三个不同的困难。他们:

1) 防止任何其他人使用相同的名字(或者如果他们这样做,他们会隐藏您的名字,这可能会造成混淆)。将事物放入 namespace 有助于实现这一点。

2) 很难同时推理所有直接修改全局的代码。命名空间对此没有帮助,除了匿名命名空间,因为它们可用于将对全局的访问限制为一个 TU。使用私有(private)静态类成员,或许可以使用一些 friend,会有所帮助。不可变的全局变量也有帮助。

3) 很难同时推理所有间接修改全局的代码,因此很难推理全局的当前状态在程序中的任何指定点应该是什么。不可变的全局变量有帮助。您不关心其状态的全局变量有帮助(例如,它可能不会影响您的代码的正确性,无论给定结果是否已被缓存,只要缓存陈旧性得到正确处理)。命名空间没有帮助。将全局状态“隐藏”在私有(private)数据成员中,同时仍然保留公共(public)访问器无济于事。

那么,命名空间是否有助于解决全局变量的难题?有一点,但不多。

如果您意识到全局变量的其他困难,那么您可以自己评估命名空间是否有帮助。如果您没有意识到全局变量的困难,那么您出于宗教信仰而避免使用全局变量并没有给自己带来任何好处,只是因为有人告诉您每个人都知道它们不好。一种了解的方法是询问愿意教你一些东西的人,而不是仅仅试图吓唬你成为一名优秀的程序员。另一种方法是使用它们,看看您遇到了什么麻烦,如果有的话。

关于c++ - 命名空间中的变量如何优于全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21366519/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com