比方说,我有这样的程序:静态变量
class Foo {
public:
unsigned int bar() {
static unsigned int counter = 0;
return counter++;
}
};
int main()
{
Foo a;
Foo b;
}
(当然,这个例子是没有意义的,因为我明明申报“计数器”作为私人属性,但它只是为了说明问题)。
我想知道C++的行为在这种情况:将在栏()方法变量“计数器”是每一个实例一样吗?
+1在多线程环境中提到危险。 – Omnifarious 2010-01-29 18:20:51
假设编译器尚未为您处理该问题。语言定义是变量在所有方法调用中保持一致。因此,编译器的工作是强制执行的,所以在多线程语言(C++的下一个版本)中,它是编译器的工作。在这个版本中,它依赖于编译器与线程库的集成。 gcc已经涵盖了这一点,保证在多个线程中对静态变量的访问是安全的。 – 2010-01-29 18:24:58
@Martin York:即C++ 0x中的静态变量保证为线程本地?有趣的是,它可能会让一些人大吃一惊。就像一个很好的静态类实例计数器。突然间,你会计算每个线程的实例。我无法相信他们会做出这样的改变。你确定?! – Omnifarious 2010-01-29 18:27:54