为什么全局变量不好?

时间:2014-01-07 21:09:16

标签: c++

为什么全局变量在C ++中被认为是不好的做法?是否有时间可以使用它们?如果是的话何时何地?我听到这个问题的答案很复杂,有人说如果它有效,有些人会告诉我尽量避免使用全局变量。

2 个答案:

答案 0 :(得分:1)

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

除此之外,全球国家难以推理并且具有令人讨厌的副作用,即在代码中严格分离关注点。这导致......意大利面条怪物。

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

答案 1 :(得分:1)

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

首先,他们将状态引入整个应用程序。这使得查找从您不想要的代码读取或写入这些变量或在您没有预料到的时候导致的错误变得更加困难。应用程序越大,这就变得越困难。具有单个全局的交互越多,应用程序变得越复杂,越难理解。

另一方面,使多线程访问安全有效变得更加困难。您是否可以在不锁定整个应用程序的情况下锁定其中一个变量?

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

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