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 的函数调用都是纯右值。
考虑这段代码:
#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 的函数调用都是纯右值。