我正在尝试重载 <=> 运算符,但以下代码会引发编译错误
错误:'operator==' 不匹配(操作数类型为 'example' 和 'example')
struct example {
int a{0};
int b{0};
auto operator <=>(const example& other) const{
return a<=>other.a;
}
};
int main() {
example a{1, 2};
example b{1, 3};
a == b;
return 0;
}
同时,如果我写 auto operator <=>(const example& other) const = default;
,不会有编译错误。但是我不能写默认值,因为我需要稍微修改一下逻辑。<> 运算符起作用。
如果您没有默认定义“rocket” ,那么您必须自己定义运算符
==
(以及可选的!=
)。自定义运算符
<=>
禁用相等生成。好吧,就好像你定义了一个自定义构造函数——就是这样,编译器不会生成默认构造函数。所以在这里。
所以定义你的运营商
一切都会奏效。现在,如果有一个运算符
==
而没有运算符!=
,那么这个不等式运算符将从相等运算符生成,作为其结果的否定。