2017-01-21 17:39发布
考虑如下代码
class Foo { public: int x, y; }; Foo operator*(const Foo &lhs, const Foo &rhs) { Foo ret; return ret; } int main() { Foo a, b, c; (a * b) = c; return 0; }
operator*(a, b)返回的应该是一个右值,为什么可以被赋值呢??编译器没有提示错误。
(a * b) = c ==> (a*b).operator=(c)
(a * b) = c
(a*b).operator=(c)
我记得右值也可以是被赋值的.如果函数返回的右值是一个引用呢?
不太明白您的意思.
你的Code是有问题的,在我这儿.
就像下面这段代码
你的代码是例子代码吧? 你的重载运算符是错误的. 格式都写错了吧? 重载不应该是如下吗?
不能把“左值”、“右值”简单理解为出现在等号两边的位置。尤其是一个类对象出现在等号左边时,对象赋值实际是通过调用函数operator=完成的:
operator=
最多设置5个标签!
付费偷看金额在0.1-10元之间
(a * b) = c
==>(a*b).operator=(c)
我记得右值也可以是被赋值的.如果函数返回的右值是一个引用呢?
不太明白您的意思.
你的Code是有问题的,在我这儿.
就像下面这段代码
你的代码是例子代码吧? 你的重载运算符是错误的. 格式都写错了吧? 重载不应该是如下吗?
不能把“左值”、“右值”简单理解为出现在等号两边的位置。尤其是一个类对象出现在等号左边时,对象赋值实际是通过调用函数
operator=
完成的:一周热门 更多>