全局变量和类变量有何不同,它们是相同的吗
how global variable differs from class variable, are they the same?
假设在函数外部声明的变量是全局变量。
//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,这两个变量都应该在类的任何方法或函数中可访问的类范围中初始化,所以你可以说这些是全局变量。
希望这将帮助你了解当地和全球的变种
相关文章:
- 查找后更改类变量
- 通过继承类使用来自不同命名空间的运算符
- Python中的for循环与C++有何不同
- 如何避免在仅标头库中C++类/变量重定义
- c++ 在非类函数中使用类变量
- 在C++中释放内存期间,迭代器与指针有何不同
- 基于模板的类变量
- 分段 访问私有类变量时出错
- C 是否具有接口类概念,如果它在那里,那么它与Java接口类别有何不同
- C 类变量整数具有不同的值
- 使用动态铸件来返回派生类内部的变量的不同值
- 全局变量和类变量有何不同,它们是相同的吗
- 当argumentname和变量名相等时,c++类setter设置不同的变量
- 全局排序和每原子变量排序有何不同
- float的类内静态常量初始化与C++中的int有何不同
- x = &(*变量) 与 x = 变量有何不同?
- 如何在c++中使用静态变量在不同的类之间共享数组
- 如何创建不同大小的数组作为私有类变量
- 将不同类型的变量写入二进制文件,然后将其读入类变量,会得到错误的值
- 此变量赋值有何不同?