gpt4 book ai didi

c++ - 无法通过引用传递的参数维护 const 正确性

转载 作者:行者123 更新时间:2023-11-28 07:42:13 27 4
gpt4 key购买 nike

我确定以前有人问过这个问题,但所有搜索结果都有 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);
}

最佳答案

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

如果您需要 first(我假设它是 GuestList 的成员)是非 const,那么您应该不会采用 const 引用。

演示:

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

想象一下,如果这不是一个错误,那么我将能够执行 *p = 10; 来更改 x 的值,即使对象应该是 const

关于c++ - 无法通过引用传递的参数维护 const 正确性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15581947/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com