【发布时间】:2020-07-06 20:45:41
【问题描述】:
看看这段代码:
class test
{
int x;
public:
test ()
{
x = 3;
}
};
test returnObj (test &obj)
{
return obj;
}
int main ()
{
test object;
returnObj (returnObj (object)); // line A
return 0;
}
此代码将在 A 行出现错误,因为我们将按值返回的函数作为实际参数传递,它只接受引用。到现在为止还挺好。有道理。
假设我们为类测试重载了 = 和 + 运算符。现在看看这个:
test a, b;
test d = a + b;
此代码将创建两个类型为 test 的对象,添加它们并将结果分配给对象 d。但是重载+运算符的运算符函数原型是:
test operator+ (const test&) const;
这意味着 a + b 将按值返回结果对象,然后将其传递给重载 = 运算符的运算符函数,其原型为:
test& operator= (const test&);
这清楚地表明它只接受参考。那么为什么编译器在这里没有给出错误。 (顺便说一下,按值返回对象的实际含义是什么)
【问题讨论】:
标签: c++ oop reference operator-overloading return-value