为什么这个const成员函数修改静态成员数据?

时间:2013-03-11 05:52:24

标签: c++ const

我在C ++中使用Eckel-Thining的以下代码行

Class Obj{
    static int i,j;
    public:
    void f() const {cout<<i++<<endl;}
    void f() const {cout<<i++<<endl;}
};
int Obj::i=47;
int Obj::j=11;

现在它在Ecekl中为const成员函数编写,通过声明成员函数const,我们告诉编译器不要修改类数据。我理解在某些特定的情况下,比如可变const和显式地抛弃了这个指针的常量,我们可以废除它,但是这两个都没有发生,并且i ++和j ++正常工作。为什么会这样?

2 个答案:

答案 0 :(得分:6)

const仅适用于对象(this指针为const),允许修改static members

答案 1 :(得分:2)

  

在const成员函数中,通过const访问路径访问调用该函数的对象;因此,const成员函数不得修改对象及其非静态数据成员。

源:someone cites c++ standard

如您所见,根据c ++标准,静态数据成员不受const保护。