全局变量和类变量有何不同,它们是相同的吗

how global variable differs from class variable, are they the same?

本文关键字:类变量 何不同 全局变量      更新时间:2023-10-16

假设在函数外部声明的变量是全局变量。

//sample.cpp
int g = 0;
namespace foo 
{
int x = 5;
class bar
{
int y = 7;
/** rest of the bar class **/
}
/** rest of the bar namespace **/
}

我知道g是一个全局变量
我的问题是:
x是全局变量吗
y是全局变量吗
换句话说:变量是否也在类和命名空间全局变量中声明(在我的示例中定义)?

在编辑>>之后添加了以下全文。

将sample.cpp更改为:

#include <stdio.h>
int g;
int g2 = 2;
namespace foo 
{
extern int x = 5;
extern int x2; //accessing x2 will lead to an error.
class bar
{
public:
int foo::bar::y; //declaring y with a value will lead to an error.
/** rest of the bar class **/
};
/** rest of the bar namespace **/
}
int main()
{
}

正如Jon所建议的,我尝试了一些东西,得出了以下假设:

  • g是一个全局变量,用0初始化,在main()之前初始化
  • x是一个命名空间变量,必须给定一个声明,并且在main()之前进行初始化
  • y是一个类变量,不能给出声明,在main()之前不会初始化,必须由构造函数初始化
  • 我想唯一的全局变量是g,因为所有全局int变量都是用值0初始化的,而x和y的情况并非如此

简短回答。x是,y不是。

x是全局的,因为它可以从程序中的任何位置访问,但您必须将其名称完全限定为foo.x。要从另一个文件访问它,您通常必须包含一个extern语句:extern int foo.x,这实际上是告诉编译器"这个程序中有一个名为foo.x的int变量,您只是还没有看到它"。引用将在链接时解析。

y是类bar的成员变量。对于bar的每个实例,该对象中都包含y。

首先我们讨论全局var和局部var

全局var可以在任何方法或函数中本地或全局访问,而本地var仅限于其周围,或者根本无法在不同的方法中调用,它可以在方法内部访问。

我们不能在类的外侧声明var,这两个变量都应该在类的任何方法或函数中可访问的类范围中初始化,所以你可以说这些是全局变量。

希望这将帮助你了解当地和全球的变种