通过引用传递的参数无法维护常量的正确性
Having trouble maintaining const correctness with parameter passed by reference
我肯定以前有人问过这个问题,但所有搜索结果都有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-预处理器常量..我做错了什么
- 用C++中的一个变量定义一个常量
- 什么时候在C++中返回常量引用是个好主意
- 代理对象的常量正确性
- 我想将一个对T类型的非常量左值引用绑定到一个T类型的临时值
- 通过多个头文件使用常量变量
- 在cuda线程之间共享大量常量数据
- 不能在初始值设定项列表中将非常量表达式从类型 'int' 缩小到'unsigned long long'
- 有没有什么方法可以使用一个函数中定义的常量变量,也可以由c++中同一程序中的其他函数使用
- 是默认情况下分配给char数组常量的值
- 私有类型的静态常量成员
- 类似枚举的计算常量
- 递归模板化函数不能分配给具有常量限定类型"const tt &"的变量"state"
- 为什么我可以通过引用修改常量返回
- 如何创建长度由常量参数指定的数组
- 当一个值是非常量但用常量表达式初始化时使用constexpr
- 返回常量对象引用 (getter) 和仅返回字符串有什么区别?
- 如何维护资源管理器项目视图中当前可见的项目列表
- 使用类只是为了维护几个常量变量是个好主意吗?
- 通过引用传递的参数无法维护常量的正确性