这些变量的范围是什么?

ale*_*ale 1 c++

请参阅下面的C++代码片段:

#include .....

Class1 class1;
Class2 class2;
...

void Class3::foo() {
    ...
}
Run Code Online (Sandbox Code Playgroud)

变量有哪些:class1和class2?它们是全局变量吗?静态变量?实际上这些是什么?在C++ OO编程中,使用这些是不错的做法,因为文件中任何类的任何成员函数都可以访问它们?

对不起初学者的问题.

谢谢.

Alo*_*ave 8

是的class1和class2是全局变量.

什么是全局变量?
在块外部声明的变量称为全局变量.全局变量具有程序范围,这意味着它们可以在程序中的任何位置访问,并且只有在程序结束时才会被销毁.

由于全局变量具有程序范围,因此可以跨多个文件使用它们.为了使用已在另一个文件中声明的全局变量,您必须使用前向声明或头文件以及extern关键字.Extern告诉编译器您没有声明一个新变量,而是引用其他地方声明的变量.

在C++ OO编程中,使用这些是不错的做法,因为文件中任何类的任何成员函数都可以访问它们?

通常,人们使用全局变量,因为:

  • 他们不了解C++变量传递机制,或者他们是懒惰的.
  • 保存整个程序需要使用的数据(例如配置设置).
  • 在没有调用者/被调用者关系的代码之间传递数据(例如,多线程程序)

但全球变量是邪恶的!!
为什么?
原因很简单,它们通过多种方式增加了程序的复杂性.
很难跟踪修改的全局变量,因为它可以在任何多个文件中的任何位置进行修改.

在多线程程序中,多个线程可以竞争获取这些全局变量,因此应始终通过某种同步机制来保护这些全局变量.通常,除非您了解整个系统,否则很难理解并编写此类机制.

既然你问过,
什么是静态变量?
静态变量是由关键字限定的变量static.

静态变量与全局变量有何不同?
需要考虑的重要区别点:

范围:
对象的范围是对象在被访问的位置是否可见(以其名称所知).

静态变量是定义它们的块的本地变量,而全局变量可以跨程序的任何文件访问.