通过引用传递的参数无法保持const正确性

时间:2013-03-23 00:31:19

标签: c++ reference const

我确信之前已经提出此问题,但所有搜索结果都有const&个问题。

我想确保以下方法不会更改传递给它的GuestNode,所以我想传递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);
   }

1 个答案:

答案 0 :(得分:1)

如果您将guest设为const GuestNode&,则&guestconst GuestNode*。也就是说,它是指向const GuestNode的指针。这是有道理的,否则您将能够通过非const指针修改const对象。因此,如果您要将指针分配给first和/或p,则需要确保它们const GuestNode*也是。{/ p>

如果您需要first,我假设其是GuestList的成员,则为非const,那么您不应该使用const参考

演示:

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

想象一下,如果这不是错误,那么我就可以*p = 10;更改x的值,即使该对象应该是const