首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >返回的对象怎么可能是可赋值的?

返回的对象怎么可能是可赋值的?
EN

Stack Overflow用户
提问于 2012-01-12 16:55:25
回答 1查看 842关注 0票数 18

在Effective C++的第3项中,Scott Meyer建议为名为Rational的类重载operator*

    class Rational { ... };
    const Rational operator*(const Rational& lhs, const Rational& rhs);

下面一行解释了返回值为const-qualified的原因:如果返回值不是const,程序员可以编写如下代码:

    (a * b) = c;

或者,更可能的是:

     if (a*b = c)

当然可以。现在我很困惑,因为我认为一个函数的返回值,这里的运算符*,是一个右值,因此是不可赋值的。我认为它是不可分配的,因为如果我有:

    int foo();
    foo() += 3;

这将无法使用invalid lvalue in assignment进行编译。为什么不在这里发生呢?谁能解释一下这件事?

编辑:我见过许多关于Scott Meyer项目的其他帖子,但都没有解决我在这里暴露的右值问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-01-12 17:01:18

重点在于,对于类类型,a = b只是a.operator=(b)的简写,其中operator=是一个成员函数。并且可以在右值上调用成员函数。

请注意,在C++11中,您可以通过将operator=设置为仅限左值来抑制这一点:

class Rational
{
public:
  Rational& operator=(Rational const& other) &;
  // ...
};

&告诉编译器这个函数不能在右值上调用。

票数 30
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8832304

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档