0

我确定以前有人问过这个问题,但是所有搜索结果都有const&问题。

我想确保以下方法不会更改GuestNode传递给它的值,所以我想通过const GuestNode& guest,但 g++ 不会让这种情况发生,因为我正在分配&guestto 指针。为什么会这样?以及如何确保传递的参数保持原样?

   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

如果你做guest一个const GuestNode&,那么&guest就是一个const GuestNode*。也就是说,它是一个指向const GuestNode. 这是有道理的,否则您将能够const通过指向它的非const指针来修改该对象。因此,如果您要将该指针分配给firstand/or p,则需要确保它们也是const GuestNode*s 。

如果您需要first, 我假设它是 , 的成员GuestList, 是 non- 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 回答