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

时间:2014-01-13 13:19:16

标签: c++ class variables namespaces global

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

//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是一个全局变量?
是一个全局变量?
换句话说:是在类和名称空间全局变量中声明(在我的例子中定义)的变量吗?

编辑>>后添加

随后的全文。

将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 i guess,因为所有全局int变量都是用值0初始化的,而x和y不是这种情况。

2 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:0)

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

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

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

希望这有助于您了解本地和全局变量。