想象一下这个简单的代码,为什么会出现编译错误?
#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;符号它不起作用,我怎样才能使它起作用?
答案 0 :(得分:2)
要使其有效,请将main
更改为:
foo *p = &a;
bar(p);
使用左值引用(foo* &
)意味着参数必须是左值。 p
是左值,因为它是变量的名称。 &a
是一个prvalue。
如果您想更改bar
而不是main
,那么您可以使用foo *a
,foo * const &a
或foo * && a
中的任何一个,可以使用{{1}}进行初始化一个右值。