【问题标题】:Why are global variables bad? [duplicate]为什么全局变量不好? [复制]
【发布时间】:2014-01-25 17:52:23
【问题描述】:

为什么全局变量在 C++ 中被认为是不好的做法?有没有可以接受使用的时间?如果是这样,何时何地?对于这个问题,我听到了不同的答案,有人说如果有效就有效,而其他人则告诉我尽可能避免使用全局变量。

【问题讨论】:

  • 如果它有效,它就有效,但这是一场可怕的维护噩梦。* FTFY
  • 全局变量会污染你的命名空间。它们也不符合“数据隐藏”或“封装”的规则。
  • 问题:何时分配和释放全局变量?
  • 如果您刚开始编写几十或几百行长的程序,它们工作得很好。在您编写更大的代码并尝试重用您之前编写的代码之前,成本并不会真正显现出来。现在是在全局一切方面建立良好习惯的好时机:对安装任何全局的东西持怀疑态度。
  • 投票结束这个问题,因为基于意见是弱的。使用全局变量会使程序更难维护是有正当理由的。因其他原因关闭它是另一回事。

标签: c++


【解决方案1】:

除了污染全局命名空间(这意味着某人正在编写的代码包含这样一个全局的声明,可能会引入错误,因为它不情愿地引用您的符号),还有静态初始化顺序惨败。全局变量本身不是static,但无论如何最大的问题是在首次使用之前确保有效状态。

除此之外,全局状态很难推理,并且具有削弱代码中严格的关注点分离的不良副作用。这导致......各种意大利面怪物。

相信我,改用局部变量重写你的代码会迫使你清理你的设计,更好的代码是免费的结果。

【讨论】:

    【解决方案2】:

    人们经常建议不要使用全局变量有几个原因,但从根本上说,它们都围绕维护。使用全局变量的程序比不使用全局变量的程序更难维护。

    一方面,它们将状态引入整个应用程序。这使得查找代码读取或写入这些变量所导致的错误变得更加困难,这些变量是您不打算的,或者在您没有预料到的时候。应用程序越大,这变得越困难。与单个全局的交互越多,应用程序就越复杂,也就越难以理解。

    另一方面,使多线程访问安全高效变得更加困难。您能否在不锁定整个应用程序的情况下锁定这些变量之一?

    使用全局变量也会混淆所有权语义。谁真正拥有这些变量?什么时候应该创建它们?什么时候销毁?

    当然可以使用全局变量编写正确的程序。这些程序更容易编写(线程问题除外),但往往会变得非常更难以维护。强迫自己不使用全局变量有时会使编写程序变得更加困难,但它也使许多问题及早解决,最终使这些程序更易于理解、调试和扩展。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-07-18
      • 2013-08-26
      • 1970-01-01
      • 2023-03-09
      • 2021-06-20
      • 2019-05-04
      相关资源
      最近更新 更多