为什么C ++中存在全局变量?

时间:2015-12-13 10:10:06

标签: c++ global-variables

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

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

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

3 个答案:

答案 0 :(得分:4)

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

尽管Java和C#明确指出“不需要全局变量,但所有内容都应该存在于类中” - 几乎每个托管项目中“Utils”和“Helpers”类的存在都清楚地表明了相反的情况。

想到的案例:

  • 全球有用的宏,例如EOF
  • 全球视频流,例如std::coutstd::cin
  • 该计划的当前区域设置
  • 进程'堆指针

当然,建议找到合适的类或命名空间,但不是强制性的。

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

答案 1 :(得分:3)

如果您正在开始一个完全用C ++开发的新项目,那么全局变量是完全没必要的。它们可以由类静态变量和具有命名空间可见性的变量替换。

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

  

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

这就是全局变量的设施尚未从语言中删除的原因。

答案 2 :(得分:0)

全局变量有时很尴尬的原因是很难追踪修改它们的每个地方。给它们一个更复杂的名称(即,通过将它们写成类中的静态变量,Java)并不会改变它。全局变量(通过任何机制)消除了将在整个程序中使用的状态信息传递给不需要它自己但直接或间接地需要它的其他功能的功能的需要。这种混乱被称为" tramp data",并且在很多方面比全局数据更差。