术语“全局变量”可以抛出很多,有时它并不那么正确,因为术语“全局变量”并没有真正由标准定义。对于可从“任何地方”访问的变量,这是一个非常多产且常见的术语,但这并不是全部(尤其是因为“任何地方”是高度主观的!)。
要真正掌握这一点,您需要了解变量的两个主要方面:storage
这里有 linkage
一个很好的答案。
让我们看一下“全局变量”的可能定义:
在某些圈子中,“全局变量”是指任何具有external
链接的变量。这包括你给出的每一个例子。
在其他情况下,internal
链接也被认为是全局的。除了第一组之外,这将包括在函数之外用static
orconst
说明符声明的变量。有时这些并不被认为是真正的全局,因为它们无法在特定编译单元之外访问(通常是指当前的 .cpp 文件及其所有包含在一个 blob 中的头文件)。
最后,有些人认为任何static
存储变量都是全局的,因为它的存在在程序的整个生命周期中都是持久的。因此,除了第一组和第二组之外,在函数中声明但声明的变量static
可以称为全局变量。返回对这些的引用是可行的,因此它们仍然可以通过主观的“任何地方”访问。
用一个与你类似的例子总结一下:
extern int extern_int; // externally linked int, static storage (first group)
int just_an_int; // by default, externally linked int, static storage (first group)
static int static_int; // internally linked int, static storage (second group)
const int const_int; // by default, internally linked int, static storage (second group)
int & get_no_link_static_int()
{
static int no_link_static_int = 0; // no linkage int, static storage (third group)
return no_link_static_int;
}