在C/ c++中,全局变量像我的教授认为的那样糟糕吗?
当前回答
我的教授曾经说过这样的话:使用全局变量是可以的,如果你使用正确的话。我不认为我能正确地使用它们,所以我很少使用它们。
其他回答
只有在别无选择时才应该使用全局变量。在90%的情况下,引入全局变量是为了节省传递参数的成本。然后发生多线程/单元测试/维护编码,你就有问题了。
是的,在90%的情况下全局变量是不好的。在你的大学生活中,不太可能遇到例外。我能想到的一个例外是处理固有的全局对象,比如中断表。像DB连接这样的东西似乎是全局的,但不是。
当涉及到配置时,全局是很好的。当我们希望我们的配置/更改对整个项目产生全局影响时。
因此,我们可以改变一个配置,并将更改指向整个项目。但我必须警告你,你必须非常聪明地使用全局变量。
使用全局变量有点像扫地毯下的灰尘。这是一种快速的解决方法,在短期内比用吸尘盆或吸尘器清理要容易得多。然而,如果你后来搬了地毯,下面会有一个大的惊喜。
我想要反驳这篇文章所提出的观点,即它使多线程更加困难或根本不可能。全局变量是共享状态,但全局变量的替代方法(例如传递指针)也可能共享状态。多线程的问题在于如何正确地使用共享状态,而不是该状态是否恰好通过全局变量或其他方式共享。
大多数情况下,当你执行多线程时,你需要共享一些东西。例如,在生产者-消费者模式中,您可以共享一些包含工作单元的线程安全队列。您可以共享它,因为该数据结构是线程安全的。当涉及到线程安全时,队列是否是全局的完全无关紧要。
在这个线程中隐含的希望是,在不使用全局变量的情况下,将程序从单线程转换为多线程会更容易,这是天真的。是的,全局变量让搬起石头砸自己的脚变得更容易,但搬起石头砸自己的方法有很多。
我并不提倡全局变量,因为其他观点仍然成立,我的观点仅仅是程序中的线程数与变量作用域无关。
在企业内的web应用程序中,可以用于在服务器上保存会话/窗口/线程/用户特定的数据,以优化和保存连接不稳定时的工作损失。如前所述,需要处理竞争条件。我们使用类的单个实例来获取这些信息,并且对其进行了仔细的管理。