在这段代码中,为什么
(10 != i)
调用了 ==
而不是 !=
?而其他两个调用了 !=
。#include <iostream>
class Integer
{
int x;
public:
bool
operator== (const Integer &i)
{
std::cout << "==";
return x == i.x;
}
bool
operator!= (const Integer &i)
{
std::cout << "!=";
return x != i.x;
}
Integer (int t = 0) { x = t; }
};
int
main ()
{
Integer i;
std::cout << (i != i) << '\n'; // calls !=
std::cout << (i != 100) << '\n'; // calls !=
std::cout << (10 != i) << '\n'; // calls ==
}
int != Integer
定义运算符。 - paddy!(a == b)
作为替代方式。这是该语言的最近新增内容。 - BoPa!= b
更改为!(a == b)
会在这种情况下启用隐式转换)。 - Yksisarvinen10 != i
将调用由operator==
合成的operator!=
,而不是您定义的那个。请参见cppinsights。 - 康桓瑋operator!=
。只有定义operator==
就足以做正确的事情(假设您不想要任何不寻常的!=
语义)。只需不声明operator!=
即可。 - user17732522