全局变量与类变量有何不同,它们是不是相同?

Posted

技术标签:

【中文标题】全局变量与类变量有何不同,它们是不是相同?【英文标题】:how global variable differs from class variable, are they the same?全局变量与类变量有何不同,它们是否相同? 【发布时间】:2014-01-13 13:19: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()



正如乔恩建议的那样,我尝试了一些事情并得出以下假设:

g是全局变量,初始化为0,在main()之前初始化。 x 是命名空间变量,必须给出声明,并在 main() 之前初始化。 y 是一个类变量,它不能被声明并且在 main() 之前没有被初始化,并且必须由一个构造函数来初始化。 我猜唯一的全局变量是 g,因为所有全局 int 变量都使用值 0 进行初始化,而 x 和 y 则不是这样。

【问题讨论】:

何不试试看? 你不能在类范围之外定义 var 。 你会得到错误命名空间不直接包含字段或方法... 【参考方案1】:

简短的回答。 x 是。你不是。

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

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

【讨论】:

你不能在类外定义var,你会得到编译错误。【参考方案2】:

首先我们来看看全局变量和局部变量

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

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

希望这将帮助您了解本地和全局变量。

【讨论】:

以上是关于全局变量与类变量有何不同,它们是不是相同?的主要内容,如果未能解决你的问题,请参考以下文章

不同的静态全局变量共享相同的内存地址

JavaScript闭包

C语言中用const声明全局变量赋初值和不赋初值有何区别?变量存放位置有啥不一样?

java中类变量、实例变量和局部变量有何区别?

java的全局变量都有哪些作用?

将局部变量更改为全局变量不起作用