我确信之前已经提出此问题,但所有搜索结果都有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);
}
答案 0 :(得分:1)
如果您将guest
设为const GuestNode&
,则&guest
为const 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
。