静态成员变量可以调用非静态成员函数吗?

q09*_*987 0 c++

我看到了以下代码: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)

据我所知(如果我错了,请纠正我),

  1. 静态函数只能访问(写/读)静态成员变量

  2. 非静态函数可以访问(写入/读取)静态成员变量

基于上面的示例,似乎静态变量可以访问非静态函数.
它是否正确?

Ben*_*igt 5

变量不会调用任何东西

(这并没有真正解决示例代码,但它纠正了代码下面列出的两个"规则"中的误解)

静态成员函数是一个成员,可以访问其类的所有public,protected和private成员,包括static和instance.

但是,静态成员函数没有this指针,因此要访问实例成员,需要指定实例.

  • @ q0987:是的,它可以.我可以举个例子,但我真的更喜欢你先停下来思考我的答案.学习思考软件是学习编程的一个非常重要的部分. (5认同)
  • 静态成员函数无法访问非静态成员变量. (2认同)