3

可能重复:
static int a 和 int a 有什么区别?

我试图用简单的英语做一个简单的解释。我试图阅读和研究和之间的区别static intint但无论我读到什么,它似乎都让我更加困惑。假设我在下面有一堂这样的课

class B{
  static int i;
  int i;
  ...
}

简单的英语,两者有什么区别?想象一下,您正在向非程序员解释。有人在这里问过类似的问题,但这并不令我满意。

4

4 回答 4

6

这是给你的一个比喻。

想象一个拥有银行账户的组织。就 C++ 而言,该组织是您的class. 想象一下,组织有代表(工人,如果你愿意的话)。就 C++ 而言,它们是该类的实例(或变量)。

现在,每个代表都可以拥有自己的银行帐户,该帐户仅供他使用。没有其他人可以使用它。那将是正常的int

但是,每个工人也可以使用组织的银行帐户,该帐户由他们所有人共享,并且不属于他们中的任何一个。那是你的static int


现在,再次回到技术术语,以防您需要它。我会尽量简洁明了。

  • 正常int

    类类型的每个变量都有自己的个人变量。因此,在您的示例中,如果您创建 10 个类型的变量,则B每个变量都将在内部拥有自己 int i变量。

  • static int

    静态变量是类的所有变量共享的。静态变量不属于任何类变量,它属于类本身。因此,如果您将创建 10 个类型的变量,它们中的B每一个都将能够访问static int i,但它们都不会拥有它(它是共享的)。

于 2012-11-23T06:29:58.013 回答
3

类中的静态意味着对象的所有实例B a,b,c,d;具有完全相同的成员ia.i++; 改变b.i等的c.i内容

static 类内部和外部的区别在于使静态变量仅对类可见或通过类可见。当然,变量不存储在类中,而是存储在其他地方。这种语法只允许将变量的范围定义到这个特定的类。

当然,非静态成员对于每个实例都是唯一的。

于 2012-11-23T06:31:52.097 回答
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
于 2012-11-23T06:31:13.287 回答
1

为避免重复名称混淆,请设想以下情况:

class foo
{
    public:
       int i;
       static int j;
};

static int j;定义了一个变量,称为j与类相关联foo。无论foo您创建多少类型的对象,都只会有一个j. 在这种情况下,类之外的任何东西都foo可以j使用语法访问foo::j

将其与 的定义进行对比i,后者是类型对象的成员fooi为每个类型的对象创建一个唯一的foo。例如。

foo myObject;
foo myOtherObject;

myObject.i = 42; myOtherObject.i = 180;

于 2012-11-23T06:38:29.837 回答