1

有谁知道为什么我在具有 3 路运算符覆盖的类上的相等操作出现编译器错误?我正在使用 VS 2019。

class Rectangle
{
public:
    constexpr Rectangle(const int width, const int height) :
        width{ width }, height{ height } { }

    auto operator<=>(const Rectangle& rhs) const {
        return width * height <=> rhs.width * rhs.height;
    }

    int width;
    int height;
};

void Test() {
    Rectangle r1(5, 10);
    Rectangle r2(10, 5);

    auto ret1 = r1 < r2;
    auto ret2 = r1 <= r2;
    auto ret3 = r1 == r2;  // error on this line but previous two are good
}

我收到上述行的错误: NativeConsoleApp.cpp(68,20): error C2676: binary '==': 'Rectangle' does not defined this operator or a conversion to an type接受预定义的运算符

编辑:请注意非默认运算符 <=> 的解释不会生成 == 和 C++20 中的 !=并没有解决不等式运算符有效但相等运算符无效的原因。

编辑:一个月后重读后,上面的链接现在有意义了。

4

0 回答 0