2

我有以下来自 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 ,我们告诉编译器不要修改类数据。我知道在某些特定情况下,例如 mutable const 并通过显式丢弃 this 指针的 constness ,我们可以取消它,但这里两者都没有发生,并且 i++ 和 j++ 工作正常。为什么会这样?

4

2 回答 2

6

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

于 2013-03-11T05:53:37.813 回答
2

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

来源:有人引用 c++ 标准

如您所见,静态数据成员不受constc++ 标准的保护。

于 2013-03-11T06:01:20.807 回答