【发布时间】:2014-04-06 18:16:01
【问题描述】:
我有这样的链接方法:
PureCommand Hasher::nameToPure(CommandName& commandName) {
return this->commandHash.find(commandName).value();
}
ByteCommand Hasher::nameToByte(CommandName& commandName) {
return this->pureToByte(this->nameToPure(commandName));
}
第二种方法传递的是错误类型的 commandName,因为第一种方法需要引用,而不是对象。然后我尝试了这个:
ByteCommand Hasher::nameToByte(CommandName& commandName) {
return this->pureToByte(this->nameToPure(*&commandName));
}
如此处所述:How to cast/convert pointer to reference in C++ - 因为 &commandName 给了我指针......但它再次传递了一个对象。我在做什么傻事?可能这是微不足道的事情......
【问题讨论】:
-
如果不需要修改
commandName,则通过const-ref (CommandName const& commandName) 传递。据我所知,这也将解决这个问题。 -
如果你通过非常量引用编译器传递意味着你可以修改传入的对象,因此要求它是一个左值。这意味着您必须创建一个临时文件,该临时文件可能会被后续调用修改。
-
@dyp 成功了。我问为什么?实际上,我需要在一个函数中对其进行修改,但我已经解决了它。谢谢。 :)
-
pureToByte是如何声明的?我怀疑这可能是实际问题。 -
@smsware 非常量左值引用不能绑定到右值。如果
pureToByte采用CommandName&this->nameToPure(..) 按值返回 是一个外参数,当你传递一个临时参数时,你会丢失这些修改(因为右值通常是临时参数)。
标签: c++ pointers reference pass-by-reference