小编典典

成员函数中的静态变量

all

有人可以解释一下成员函数中的静态变量如何在 C++ 中工作。

给定以下课程:

class A {
   void foo() {
      static int i;
      i++;
   }
}

如果我声明 的多个实例A,调用一个实例会增加所有实例上foo()的静态变量吗?i还是只有它被调用的那个?

我假设每个实例都有自己的副本i,但是单步执行我拥有的一些代码似乎表明并非如此。


阅读 55

收藏
2022-07-17

共1个答案

小编典典

因为class A是一个非模板类并且A::foo()是一个非模板函数。static int i程序内部只有一份副本。

对象的任何实例A都会影响相同的对象,i并且对象的生命周期i将贯穿整个程序。添加示例:

A o1, o2, o3;
o1.foo(); // i = 1
o2.foo(); // i = 2
o3.foo(); // i = 3
o1.foo(); // i = 4
2022-07-17