实例方法中的静态变量

Dav*_*uve 11 c++ static-variables instance-methods

假设我有这个程序:

class Foo {
 public:
    unsigned int bar () {
        static unsigned int counter = 0;
        return counter++;
    }
};

int main ()
{
    Foo a;
    Foo b;
}
Run Code Online (Sandbox Code Playgroud)

(当然这个例子没有任何意义,因为我显然将"counter"声明为私有属性,但它只是为了说明问题).

我想知道C++在这种情况下的行为:bar()方法中的变量"counter"对于每个实例都是一样的吗?

Tim*_*sch 10

是的,counterFoo在可执行文件中的所有类型对象实例之间共享.只要您处于单线程环境中,它就可以像共享计数器一样工作.

在多线程环境中,你将有一些有趣的竞争条件来调试:).