我看到了以下代码:http:
//sourcemaking.com/design_patterns/singleton/cpp/1
class GlobalClass
{
private:
int m_value;
static GlobalClass *s_instance;
GlobalClass(int v = 0)
{
m_value = v;
}
public:
int get_value()
{
return m_value;
}
void set_value(int v)
{
m_value = v;
}
static GlobalClass *instance()
{
if (!s_instance)
s_instance = new GlobalClass;
return s_instance;
}
};
GlobalClass *GlobalClass::s_instance = 0;
void foo(void)
{
GlobalClass::instance()->set_value(1); // static variable calls non-static functions
cout << "foo: global_ptr is " << GlobalClass::instance()->get_value() << '\n';
}
Run Code Online (Sandbox Code Playgroud)
据我所知(如果我错了,请纠正我),
静态函数只能访问(写/读)静态成员变量
非静态函数可以访问(写入/读取)静态成员变量
基于上面的示例,似乎静态变量可以访问非静态函数.
它是否正确?
变量不会调用任何东西
(这并没有真正解决示例代码,但它纠正了代码下面列出的两个"规则"中的误解)
静态成员函数是一个成员,可以访问其类的所有public,protected和private成员,包括static和instance.
但是,静态成员函数没有this指针,因此要访问实例成员,需要指定实例.