为什么C++中有全局变量



如果您使用正确的OOP概念,我没有任何实际需要全局变量的用例,而且在我的应用程序中,我没有使用任何全局变量,并且能够使用面向对象的原理高效地实现所有功能。

每个类都有自己的责任,所以我想知道为什么要使用全局变量。

有人能给我指出任何真正需要使用全局变量的用例吗?

这显然是一种偏向Java/C#的方法。当整个程序需要熟悉共享数据时,全局变量有时是有用的。

尽管Java和C#明确指出"不需要全局变量,所有的东西都应该驻留在一个类中"——但几乎每个托管项目中都存在"Utils"one_answers"Helpers"类,这清楚地表明了相反的情况。

脑海中浮现的案例:

  • 全局usefull宏,如EOF
  • 全局流,如std::coutstd::cin
  • 程序的当前区域设置
  • 进程的堆指针

当然,强烈建议查找适当的类或名称空间,但不是强制性的。

此外,我对术语"适当的OOP概念"感到非常困惑。"恰当"是特定语言。在一种语言中可能是恰当的东西,在另一种语言里显然不是"恰当的"。

如果您正在启动一个完全用C++开发的新项目,那么全局变量是完全不必要的。它们可以被类静态变量和具有命名空间可见性的变量所取代。

真正的全局变量保留在语言中的唯一原因是它们在C中可用,C++是C的直接后代。根据Stroustrup,

C++是"更好的C",因为它支持使用C完成的编程风格,具有更好的类型检查和更多的符号支持(不会损失效率)。

这就是为什么全局变量的功能没有从语言中删除。

全局变量有时很尴尬的原因是很难找到它们被修改的每个地方。给它们一个更复杂的名称(即,通过将它们作为类中的静态变量,la Java)并不能改变这一点。全局变量(通过任何机制)消除了将整个程序中使用的状态信息传递给那些本身不需要状态信息但直接或间接调用其他需要状态信息的函数的需要。这种混乱被称为"不稳定数据",在很多方面比全局数据更糟糕。

相关内容

  • 没有找到相关文章

最新更新