1

constクラスのインスタンスへの参照を返すメンバー関数があります。

例:

class State
{
  const City* city1;
public:
  State(const City& c) : city1(c) {}
  const City& getReference() const {return *city1;}
  void changeStuff();
};

City *const_castとgetReference()を使用してcity1を指す非constを取得するにはどうすればよいですか?

また、次のことを行うことで、const_castを使用せずに目的を達成することができました:(すでにStateのインスタンスが存在すると仮定してstate1

City ref = state1.getReference(); //Why does it work?
City * ptr = &ref; //This is what I wanted, but not this way
ref->changeStuff(); //How can I call functions changing things if the reference was constant?

const参照を返す関数から非const参照を取得し、セッターを呼び出すにはどうすればよいですか?

ご清聴ありがとうございました

4

2 に答える 2

3
City ref = state1.getReference(); //Why does it work?

それは参照ではないので、それは機能します。const値のコピーを作成しています。これを試して:

City & ref = state1.getReference();

それはうまくいきません。次のようにconstキャストを使用できます。

City * ptr = const_cast<City*>(&state1.getReference());

オブジェクトが実際にはconstではないことを確認してください。それ以外の場合、実際に変更しようとするのは未定義の動作です。

于 2011-12-13T03:07:05.793 に答える
0

コンパイラに約束するのと同じように、何かを宣言した場合const、その内容を変更することは決してありません。なぜそれを実行したいのでしょうか。

constタイプの何かを本当に変更したい場合は、次のように宣言する必要がありますmutable

class A
{
public:
mutable int _change_me;
};

_change_meこれで、のconst参照がある場合でも、メンバーを変更できますclass A

于 2011-12-13T02:59:15.610 に答える