![](/img/trans.png)
[英]Overriding spaceship operator when parent class does not define spaceship operator for itself
[英]Define spaceship operator for simple struct
我正在尝试明确实施宇宙飞船运营商。
以下是一个失败的简单示例。 我究竟做错了什么? 神栓链接
#include <iostream>
struct Foo {
int value;
// both work
auto operator<=>(const Foo&) const = default;
//bool operator==(const Foo other) const { return value == other.value; }
// both fail
// auto operator<=>(const Foo& other) const { return value <=> other.value; }
// auto operator<=>(const Foo other) const { return value <=> other.value; }
};
// fails
//auto operator<=>(const Foo lhs, const Foo rhs) { return lhs.value <=> rhs.value; }
int main(){
Foo x{0};
std::cout << (x == x) << '\n';
}
operator<=>
实际上并没有实现==
运算符。 operator==
必须与operator<=>
分开定义。 因此,您还需要定义operator==
。
原因是==
的实现往往比<=>
更有效。
根据@Silvio Mayolo 的链接: https ://en.cppreference.com/w/cpp/language/default_comparisons
如果 operator<=> 是默认的并且 operator== 根本没有声明,那么 operator== 是隐式默认的。
因此在这个定义中:
auto operator<=>(const Foo& other) const { return value <=> other.value; }
operator==
不会被隐式声明,因此编译器错误。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.