gpt4 book ai didi

c++ - 如何描述在 C++ 中使用全局变量的所有情况?

转载 作者:太空狗 更新时间:2023-10-29 20:42:19 25 4
gpt4 key购买 nike

我知道在程序中随处可以访问的变量是全局的。这是一个正确的定义还是我们应该说“在 block 外声明的变量”?我试图了解如何更具体地定义它们。我知道在函数外简单声明全局变量的示例(通常在包含和使用之后)。我知道可以使用带有 extern 关键字的前向声明。这是 3 个全局变量(t、d 和 c)的示例:

#include <iostream>
#include "some.h"
using std::cout;
int t;
extern double d;
int main() {
extern char c; // Or here c is not an example of global variable?
t = 3;
cout << t;
}

都是这样吗?

最佳答案

术语“全局变量”可以被广泛使用,有时它并不是那么正确,因为术语“全局变量”并没有真正由标准定义。这是一个非常多产且常见的术语,用于表示可从“任何地方”访问的变量,但这并不是全部(特别是因为“任何地方”是非常主观的!)。

要真正掌握这一点,您需要了解变量的两个主要方面:存储链接 有一个很好的答案 here具体来说。

让我们看看“全局变量”的可能定义:

  • 在某些圈子里,“全局变量”是指任何具有外部 链接的变量。这包括您提供的每个示例。

  • 在其他情况下,内部 链接也被认为是全局的。除了第一组之外,这还包括在函数外部使用 staticconst 说明符声明的变量。有时这些并不被认为是真正全局的,因为它们无法在特定编译单元之外访问(通常指的是当前 .cpp 文件及其所有包含在一个 blob 中的 header )。

  • 最后,有些人认为任何 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;
}

关于c++ - 如何描述在 C++ 中使用全局变量的所有情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19015131/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com