为什么我们不能在静态成员函数中使用const成员?

时间:2011-12-28 18:01:26

标签: c++ const static-methods

class TConst
{
    const int i;
    int& ref;
    public:
    TConst(int n):i(n),ref(n){}
    static void p1(){prn(i);}//error here
};

当我尝试在const成员函数中使用static类成员时,我的编译器会生成错误。

为什么不允许?

3 个答案:

答案 0 :(得分:13)

const意味着不同的事情。在这种情况下,这意味着i在初始化后是不可变的。它意味着它是一个文字常量(就像我相信你认为它意味着)。 i对于TConst 的不同实例可能有所不同,因此static方法无法使用它是合乎逻辑的。

答案 1 :(得分:7)

即使它不是const

也不会起作用
error: a nonstatic member reference must be relative to a specific object

静态函数无法访问非静态成员变量。这是因为非静态成员变量必须属于类对象,而静态成员函数没有可以使用的类对象。

答案 2 :(得分:6)

在对象构造期间初始化const成员。 static成员不依赖于对象创建,也无法访问this指针,因此他们不知道const成员变量所在的位置。