可能重复:
What is the difference between static int a and int a?
我试图用简单的英语简单解释一下。我试图阅读和研究static int
和int
之间的区别,但无论我读到什么,似乎都让我更加困惑。假设我有一个类似下面的课程
class B{
static int i;
int i;
...
}
简单的英文,两者有什么区别?想象一下,你正在向非程序员解释。 有人问了类似这样的问题here,但这并不令我满意。
答案 0 :(得分:6)
这是你的隐喻。
想象一下拥有银行账户的组织。就C ++而言,该组织是您的class
。想象一下,组织有代表(工人,如果你想)。就C ++而言,它们是该类的实例(或变量)。
现在,每位代表都可以拥有自己的银行账户,仅供他使用。没有其他人可以使用它。这将是正常的int
。
但是,每个工作人员也可以使用由他们共享的组织的银行帐户,特别是不属于他们中的任何一个。那是你的static int
。
现在,再次回到技术术语,万一你会想要它。我会尽量清晰简洁。
正常int
:
类类型的每个变量都有自己的个人变量。因此,在您的示例中,如果您生成10个B
类型的变量,则每个变量都将在其中包含自己的 int i
变量。
static int
:
静态变量是类的所有变量的共享。静态变量不属于任何类变量,它属于类本身。因此,如果您要创建10个B
类型的变量,则每个变量都可以访问static int i
,但它们都不会拥有它(它是共享的)。
答案 1 :(得分:3)
类中的静态意味着对象的所有实例:B a,b,c,d;
具有完全相同的成员 i 。 a.i++
;更改b.i
,c.i
等内容
类内部和外部的静态差异是使静态变量仅对类或通过类可见。当然,变量不存储在类中,而是存储在其他地方。此语法只允许将变量的范围定义到此特定类。
当然,非静态成员对每个实例都是唯一的。
答案 2 :(得分:1)
如果声明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
答案 3 :(得分:1)
为避免混淆重复的名称,请想象以下内容:
class foo
{
public:
int i;
static int j;
};
static int j;
定义了一个名为j
的变量,该变量与类foo
相关联。无论您创建的foo
类型的对象有多少,都只会有一个j
。在这种情况下,班级foo
以外的任何人都可以使用语法j
访问foo::j
。
与 myObject.i = 42;
myOtherObject.i = 180;
i
的定义形成对比,foo
是i
类型对象的成员。
为foo
类型的每个对象创建了一个唯一的。
例如。
foo myObject;
foo myOtherObject;
{{1}}