从'foo *'类型的右值开始无效初始化'foo *&'类型的非const引用?

时间:2016-03-08 21:01:11

标签: c++ compiler-errors

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

#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)但是为什么用&amp;符号它不起作用,我怎样才能使它起作用?

1 个答案:

答案 0 :(得分:2)

要使其有效,请将main更改为:

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

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

如果您想更改bar而不是main,那么您可以使用foo *afoo * const &afoo * && a中的任何一个,可以使用{{1}}进行初始化一个右值。