gpt4 book ai didi

c++ - 返回的对象如何分配?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:45:26 25 4
gpt4 key购买 nike

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

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

返回值是 const 限定的原因在以下行中解释:如果它不是 const,程序员可以编写如下代码:

    (a * b) = c;

或者,更可能的是:

     if (a*b = c)

很公平。现在我很困惑,因为我认为函数的返回值,这里是 operator*,是一个右值,因此不可赋值。我认为它不可分配,因为如果我有:

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

如果赋值中的左值无效,那将无法编译。为什么这里没有发生这种情况?有人可以阐明这一点吗?

编辑:我在 Scott Meyers 的那个 Item 上看到了许多其他线程,但没有一个解决了我在这里暴露的右值问题。

最佳答案

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

请注意,在 C++11 中,您可以通过使 operator= 为左值来禁止它:

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

& 告诉编译器不能对右值调用此函数。

关于c++ - 返回的对象如何分配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39728354/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com