0

これは以前にも質問されたことがあると思いますが、すべての検索結果にconst&質問があります。

次のメソッドが渡されたものを変更しないGuestNodeようにしたいので、 を渡したかったのですが、 to ポインターconst GuestNode& guestを割り当てているため、g ++はそれを実現しません。&guestなぜそれが起こるのですか?そして、渡されたパラメーターがそのままであることを確認するにはどうすればよいですか?

   void GuestList::Add(GuestNode& guest)
   {
      if ( first == 0 )
      {
         //first guest
         first = &guest;
      }
      else
      {
         //nth guest
         GuestNode *p = first;
         while ( p->next != 0 )
            p = p->next;
         p->next = &guest;
      }
      SetCount(GetCount() + 1);
   }
4

1 に答える 1

1

を作ればguestconst GuestNode&それ&guestconst GuestNode*です。つまり、へのポインタconst GuestNodeです。constそれは理にかなっています。そうしないと、オブジェクトへの非constポインターを介してオブジェクトを変更できます。したがって、そのポインターをfirstand/orに割り当てる場合pは、それらも s であることを確認する必要がありconst GuestNode*ます。

firstのメンバーであると想定しているGuestListが非である必要がある場合constは、参照を取得するべきではありませんconst

デモンストレーションするには:

const int x = 5;
int* p = &x; // error: invalid conversion from ‘const int*’ to ‘int*’

これがエラーでなければ、オブジェクトが であるはずなのに、*p = 10;の値を変更できると想像してください。xconst

于 2013-03-23T00:33:51.603 に答える