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;

今では、メンバー関数 const を宣言することにより、クラス データの変更を控えるようにコンパイラに指示する const メンバー関数の Ecekl で記述されています。mutable const のようないくつかの特定のケースでは、明示的に constness of this pointer をキャストすることにより、それを取り除くことができることを理解していますが、ここでは 2 つのどちらも発生しておらず、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 に答える