从类型为"foo*"的右值初始化类型为"foo*&"的非常量引用无效?

invalid initialization of non-const reference of type ‘foo*&’ from an rvalue of type ‘foo*’?

本文关键字:foo 类型 常量 引用 非常 无效 初始化      更新时间:2023-10-16

想象一下这个简单的代码,为什么会出现编译错误?

#include <iostream>
using namespace std;
class foo{
public:
    int *b;
    foo(int a) {
        b = NULL;
    }
};
void bar(foo *&a) {
    cout << "OK?" << endl;
}
int main() {
    foo a(2);
    bar(&a);
    return 0;
}

我知道我可以使用bar(foo *a)但是为什么使用&符号它不起作用,我怎样才能让它工作?

要使其正常工作,请将main更改为:

foo *p = &a;
bar(p);

使用左值引用(foo* &)意味着参数必须是左值。 p是一个左值,因为它是变量的名称。 &a是一个原则。


如果你想改变bar但不想改变main那么你可以使用foo *afoo * const &afoo * && a中的任何一个,可以用右值初始化。