0

重複の可能性:
C++ 'mutable' キーワード

class student {

   mutable int rno;

   public:
     student(int r) {
         rno = r;
     }
     void getdata() const {
         rno = 90;
     } 
}; 
4

3 に答える 3

2

type のオブジェクトで使用されている場合でも、メンバー関数rnoを介してメンバーに書き込む (つまり、"mutate") ことができます。studentconststudent

class A {
   mutable int x;
   int y;

   public:
     void f1() {
       // "this" has type `A*`
       x = 1; // okay
       y = 1; // okay
     }
     void f2() const {
       // "this" has type `A const*`
       x = 1; // okay
       y = 1; // illegal, because f2 is const
     }
};
于 2012-08-25T14:01:22.537 に答える
1

このmutableキーワードは、constオブジェクトが自身のフィールドを変更できるようにするために使用されます。あなたの例だけでは、mutable修飾子を削除すると、次の行でコンパイラ エラーが発生します。

rno = 90;

宣言されたオブジェクトはconst(デフォルトでは) そのインスタンス変数を変更できないためです。

以外の唯一の回避策はofmutableを実行することですが、これは非常にハックです。const_castthis

また、 const の場合std::map、インデックス ing 演算子を使用してアクセスできない sを処理するときにも便利です。[]

于 2012-08-25T14:02:31.003 に答える
0

あなたの特定のケースでは、嘘をついて欺くために使用されます。

student s(10);

データが欲しいですか?もちろん、電話してgetdata()ください。

s.getdata();

あなたはデータを取得すると思っていましたが、実際には に変更さs.rnoれました90。はっ!そして、あなたはそれが安全だと思っていましgetdataconst...

于 2012-08-25T14:03:55.127 に答える