我想知道我是否在类成员函数中有一个静态变量,如果该变量只有该类的实例或该类的每个对象。这是我想要做的一个例子。
class CTest
{
public:
testFunc();
};
CTest::testFunc()
{
static list<string> listStatic;
}
每个实例或每个类都是listStatic吗?
答案 0 :(得分:9)
根据该函数CTest::testFunc()
- 该成员函数的每次调用都将使用相同的变量。
答案 1 :(得分:5)
让你的思绪沸腾的东西:
template <typename T>
struct Question
{
int& GetCounter() { static int M; return M; }
};
在这种情况下,有多少计数器?
。
。
。
。
答案是:T
实例化的Question
多个template
,Question<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()::M
和Wazza::Bar()::M
。
答案 2 :(得分:2)
是“每个类”,因为它对于实际方法是静态的,并且该方法只有一个位置,即在类中。