如果<
,>
和==
存在运算符重载,编译器是否应该能够自动为<=
和>=
创建?
(a <= b) means (a < b || or a == b)
(a >= b) means (a > b || or a == b)
至少,如果+=
过载,编译器会对+
执行相同的操作。
答案 0 :(得分:2)
+=
和>=
并不相同。
u+=2
是u=u+2
>=
是> || ==
的简写。
所以你在第二种情况MoreThan() || Equal()
中有2个连续的呼叫,这可能会出现像
bool
(如@vcjones所述)但总的来说:聚合 automaticaly (在幕后)用户定义的函数永远不是一个好主意,因为最终结果不稳定,因为取决于具体的实现,所以不可预测。而且您不希望编译器生成不可预测的代码。
答案 1 :(得分:1)
不,它不能。一个原因是运营商不必返回布尔(虽然我不知道为什么有人会这样做)。例如:
public static string operator <(Class1 a, Class1 b)
{
return "hello";
}
public static int operator >(Class1 a, Class1 b)
{
return "bye";
}
编译很好,在这种情况下,编译器不能真正自动生成另一个操作符。编译器应该如何确定字符串的相反值是什么?