Return 个函数

Return of a func

考虑这段代码:

#include <iostream>
using namespace std;

class Rectangle {
    int width, height;
  public:
    Rectangle() {}
    Rectangle (int x, int y) : width(x), height(y) {}
    int area() {return width * height;}
    friend Rectangle duplicate (const Rectangle&);
};

Rectangle duplicate (const Rectangle& param)
{
  Rectangle res;
  res.width = param.width*2;
  res.height = param.height*2;
  return res;
}

int main () {
  Rectangle foo;
  Rectangle bar (2,3);
  foo = duplicate (bar);
  cout << foo.area() << '\n';
  return 0;
}

第14行有一个友元函数,这个函数在函数体内声明了一个对象。最后 return 那个对象。现在想知道这个函数的return是右值还是左值?

I wonder if the return of this function is an rvalue or lvalue?

这是一个右值。来自 value category:

The following expressions are prvalue expressions:

  • a function call or an overloaded operator expression, whose return type is non-reference...

这意味着调用表达式 duplicate (bar) 是一个 rvalue.


还要注意 res 本身是一个左值表达式。

请记住,值类别是表达式的 属性,而不是“值”。

res 作为 id-expr 是左值。但是,duplicate (bar) 函数调用表达式是右值,因为所有返回 non-reference 的函数调用都是纯右值。