我试图用简单的英语做一个简单的解释。我试图阅读和研究和之间的区别static int
,int
但无论我读到什么,它似乎都让我更加困惑。假设我在下面有一堂这样的课
class B{
static int i;
int i;
...
}
简单的英语,两者有什么区别?想象一下,您正在向非程序员解释。有人在这里问过类似的问题,但这并不令我满意。
我试图用简单的英语做一个简单的解释。我试图阅读和研究和之间的区别static int
,int
但无论我读到什么,它似乎都让我更加困惑。假设我在下面有一堂这样的课
class B{
static int i;
int i;
...
}
简单的英语,两者有什么区别?想象一下,您正在向非程序员解释。有人在这里问过类似的问题,但这并不令我满意。
这是给你的一个比喻。
想象一个拥有银行账户的组织。就 C++ 而言,该组织是您的class
. 想象一下,组织有代表(工人,如果你愿意的话)。就 C++ 而言,它们是该类的实例(或变量)。
现在,每个代表都可以拥有自己的银行帐户,该帐户仅供他使用。没有其他人可以使用它。那将是正常的int
。
但是,每个工人也可以使用组织的银行帐户,该帐户由他们所有人共享,并且不属于他们中的任何一个。那是你的static int
。
现在,再次回到技术术语,以防您需要它。我会尽量简洁明了。
正常int
:
类类型的每个变量都有自己的个人变量。因此,在您的示例中,如果您创建 10 个类型的变量,则B
每个变量都将在内部拥有自己的 int i
变量。
static int
:
静态变量是类的所有变量共享的。静态变量不属于任何类变量,它属于类本身。因此,如果您将创建 10 个类型的变量,它们中的B
每一个都将能够访问static int i
,但它们都不会拥有它(它是共享的)。
类中的静态意味着对象的所有实例:B a,b,c,d;
具有完全相同的成员i。a.i++
; 改变b.i
等的c.i
内容
static 类内部和外部的区别在于使静态变量仅对类可见或通过类可见。当然,变量不存储在类中,而是存储在其他地方。这种语法只允许将变量的范围定义到这个特定的类。
当然,非静态成员对于每个实例都是唯一的。
如果您声明 B 的多个对象,则每个对象都将拥有自己的 int i 副本。但是,所有对象都只有一个静态 int i。
B::i //This will refer to the static i
//As you can see this is accessed through the class name
B obj, obj2;
obj.i //This will refer to the obj member i
obj2.i // and will be different from this which is obj2 member i
为避免重复名称混淆,请设想以下情况:
class foo
{
public:
int i;
static int j;
};
static int j;
定义了一个变量,称为j
与类相关联foo
。无论foo
您创建多少类型的对象,都只会有一个j
. 在这种情况下,类之外的任何东西都foo
可以j
使用语法访问foo::j
。
将其与 的定义进行对比i
,后者是类型对象的成员foo
。i
为每个类型的对象创建一个唯一的foo
。例如。
foo myObject;
foo myOtherObject;
myObject.i = 42;
myOtherObject.i = 180;