函数的返回值未识别为左值

use*_*224 2 c++ pointers reference lvalue

这是一个例子:

void foo(int*& x) {}

struct boo  
{  
  int* z;  
  int* getZ() { return z; }  
};

int main()
{
  int* y;
  foo(y);  // Fine

  boo myBoo;
  foo(myBoo.getZ());  // Won't compile

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

我可以通过让boo :: getZ()返回对指针的引用来解决这个问题,但我试图理解传递给foo()的两个参数之间的区别.boo :: getZ()返回的int*不是左值吗?如果是这样,为什么不呢?

Ker*_* SB 9

如果T是对象类型并f声明为...

T &  f();                                          f() is an lvalue
T && f();                     then                 f() is an xvalue
T    f();                                          f() is a prvalue
Run Code Online (Sandbox Code Playgroud)

所以getZ()是一个prvalue(T = int *),它是一个rvalue,而不是一个左值.