我将对指针变量的引用传递给函数。该函数将做一些事情并将指针变量指向某个对象。代码:
int Foo(Obj* &ptr) {
// do something...
ptr = some_address;
return return_value;
}
int main() {
Obj* p = nullptr;
int ret = Foo(p);
// do something with ret
p->DoSomething();
}
但是,如果我想传递对指向 const 的指针的引用,事情就会变得更加棘手。我希望更改指针变量本身(因此引用),但我不希望Obj
使用此指针更改指向的实例。在我的想象中,它应该是这样的:
int Foo(const Obj* &ptr) {
// do something...
ptr = some_address;
return return_value;
}
int main() {
const Obj* p = nullptr;
int ret = Foo(p);
// do something with ret
p->DoSomething(); // this should only work when DoSomething() is const method
}
编辑:以下错误无法重现,因此被删除。这个问题的重点是指针引用的概念,而不是解决问题
C++ 给出了这个编译错误:
main.cpp:22:10: error: cannot bind non-const lvalue reference of type ‘const Obj*&’ to an rvalue of type ‘const Obj*’ 22 | Foo(ptr); | ^~~ main.cpp:14:23: note: initializing argument 1 of ‘void test(const Obj*&)’ 14 | int Foo(const Obj* &ptr) { | ~~~~~~~~~~~~^~~
一些想法:
错误无法重现
- 我相信当我尝试将“未命名变量”传递给参考参数时会显示此错误。在这种情况下,我正在传递变量
ptr
,这应该不是问题。
ptr
作为参数传入,因为该函数具有有用的返回值。设置ptr
更像是这个功能的副产品,调用者可以选择忽略或使用。我也可以尝试使用
Obj**
作为参数,它是通过指针传递而不是通过引用传递。这在 aconst Obj**
作为参数传递时有效。我只是想知道如果参数通过引用传递会怎样。