有人可以解释一下成员函数中的静态变量如何在 C++ 中工作。
给定以下课程:
class A { void foo() { static int i; i++; } }
如果我声明 的多个实例A,调用一个实例会增加所有实例上foo()的静态变量吗?i还是只有它被调用的那个?
A
foo()
i
我假设每个实例都有自己的副本i,但是单步执行我拥有的一些代码似乎表明并非如此。
因为class A是一个非模板类并且A::foo()是一个非模板函数。static int i程序内部只有一份副本。
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