【发布时间】:2020-08-25 14:39:14
【问题描述】:
在 c++20 中,如果我为一个类型提供 operator==,那么编译器会合成一个 operator!=,但反之则不然。
这里有一些code:
struct A {};
bool operator==(A const&, A const&);
struct B {};
bool operator!=(B const&, B const&);
int main()
{
if (A{} != A{}) {} // error in c++17
// ok in c++20
if (B{} == B{}) {} // error in c++17
// error in c++20, why?
}
这似乎不一致,因为!= 和== 需要相反,如果一个可以从另一个合成,那么逆也应该起作用。这是什么原因?
【问题讨论】:
-
这里 == 和 != 是两个完全不同的运算符。因此,除非您将它们定义为逆运算,否则它们的运算不是逆运算。
-
@OS2 - 除了它们是在 C++20 下隐式反转。
标签: c++ language-lawyer c++20 comparison-operators