请参见下面的C++代码片段:
#include .....
Class1 class1;
Class2 class2;
...
void Class3::foo() {
...
}
有哪些变量:class1和class2?它们是全局变量吗?静态变量?这些到底是什么?在C++ OO编程中,使用这些是一种好习惯吗,因为文件中任何类的任何成员函数都可以访问它们?
对不起初学者的问题。
谢谢。
最佳答案
是的,class1和class2是全局变量。
什么是全局变量?
在块外部声明的变量称为全局变量。全局变量具有程序范围,这意味着可以在程序中的任何位置访问它们,并且仅在程序结束时销毁它们。
由于全局变量具有程序范围,因此可以在多个文件中使用它们。为了使用已在另一个文件中声明的全局变量,您必须使用前向声明或头文件以及extern
关键字。 Extern告诉编译器您不是在声明新变量,而是引用在其他地方声明的变量。
在C++ OO编程中,使用它们是一种好习惯,因为文件中任何类的任何成员函数都可以访问它们?
通常,人们使用全局变量是因为:
但是全局变量是邪恶的!
为什么?
出于简单的原因,它们使程序的复杂性增加了许多倍。
仅仅因为可以在多个文件中的任何一个文件的任何地方进行修改,都很难跟踪被修改的全局变量。
在多线程程序中,多个线程可以争夺这些全局变量,因此应始终通过某种同步机制来保护这些全局变量。通常,除非您了解整个系统,否则很难理解和编写这种机制。
既然你问过
什么是静态变量?
静态变量是将由关键字
static
限定的变量。静态变量与全局变量有何不同?
要考虑的重要区别点:
范围:
对象的范围是在访问对象的位置上该对象是否可见(以其名称已知)。
静态变量在定义它们的块中是局部的,而全局变量可在程序中的任何文件中访问。
关于c++ - 这些变量的范围是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6551787/