是每个实例还是每个类的本地静态变量?

时间:2010-09-23 12:40:43

标签: c++

我想知道我是否在类成员函数中有一个静态变量,如果该变量只有该类的实例或该类的每个对象。这是我想要做的一个例子。

class CTest
{
public:
  testFunc();

};

CTest::testFunc()
{
  static list<string> listStatic;
}

每个实例或每个类都是listStatic吗?

3 个答案:

答案 0 :(得分:9)

根据该函数CTest::testFunc() - 该成员函数的每次调用都将使用相同的变量。

答案 1 :(得分:5)

让你的思绪沸腾的东西:

template <typename T>
struct Question
{
  int& GetCounter() { static int M; return M; }
};

在这种情况下,有多少计数器?




答案是:T实例化的Question多个templateQuestion<int>不是类本身,但Question<double>是一个类,与{不同{1}},因此每个人都有一个不同的计数器。

基本上,如上所述,局部静态适用于函数/方法。该方法有一个,两个不同的方法将有两个不同的局部静态(如果它们有任何一个)。

struct Other
{
  int& Foo() { static int M; return M; }
  int& Bar() { static int M; return M; }
};

这里有2个计数器(全部都是):一个是Other::Foo()::M,另一个是Other::Bar()::M(名称只是为了方便)。

有一个类的事实是附件:

namespace Wazza
{
  int& Foo() { static int M; return M; }
  int& Bar() { static int M; return M; }
}

另外两个计数器:Wazza::Foo()::MWazza::Bar()::M

答案 2 :(得分:2)

是“每个类”,因为它对于实际方法是静态的,并且该方法只有一个位置,即在类中。