类中的静态局部变量是否在对象之间存在?

时间:2010-06-10 17:14:35

标签: c++ static instance

class MyClass
{
  static int staticInt;

  void instanceMethod( int param )
  {
    static int parameter = param;
  }
}

显然,MyClass的所有实例之间共享staticInt。但是,不同的MyClass实例在instaceMethod中有不同的parameter静态局部变量值吗?

更新

程序执行之间怎么样?当然,它们可能在多个程序实例中有所不同?什么定义“范围” - 执行单位? c ++运行时?

更新

谢谢 - 这帮助我压制了一个关键的错误。希望我能接受所有这些,但我会在没有其他标准的情况下接受第一个答案。

4 个答案:

答案 0 :(得分:7)

parameter只有一个实例。

如果您想为该类的每个实例使用parameter的实例,请使用非静态成员变量。

答案 1 :(得分:6)

为了使不同实例具有不同的parameter值,您必须使parameter成为该类的非静态成员。

在当前版本中,所有实例都将共享相同的parameter对象。在这方面,所有static个对象的行为完全相同。唯一取决于声明点的是名称的范围。即名称可见的区域。至于变量的寿命和保值特性 - 它们总是相同的。尊重它就像一个“全局”变量,无论你在哪里声明它。

在您的示例中,parameterstaticInt在保留值的属性方面没有区别。唯一的区别是,staticInt可供所有班级成员访问,而parameter只能通过instanceMethod方法访问。

该语言无法创建在程序执行期间值保持不变的变量。这种持久性必须手动实现。

答案 2 :(得分:1)

是的,他们都坚持了下来。它们在实例之间不能有不同的值。

答案 3 :(得分:0)

这些值在程序执行期间(在同一程序的两次不同调用之间)不是持久的