运算符重载c ++

fin*_*oop 5 c++ operator-overloading

重载运算符时,是否需要重载> = <=和!=?

对于c ++而言,似乎很聪明地调用!operator = for!=,!> for operator <= and!<for operator> =.

是这种情况,还是必须超载每个功能?

sma*_*uck 7

提升运营商可能就是您想要的.这些将基于一些基本的运算符得出大多数运算符.

C++没有自动提供这一点,因为人们可以给<和>提供完全不同的含义,例如(虽然这通常是一个坏主意).


AnT*_*AnT 2

是的,如果您希望所有这些都按照您希望的方式工作,那么这是必要的。

C++ 不会对大多数可重载运算符强制任何特定语义。唯一固定的是运算符的一般语法(包括一元或二元以及优先级和结合性等)。这立即意味着您在重载中实现的实际功能可以是绝对任意的。==一般情况下,操作员所做的事情和操作员所做的事情之间可能没有任何有意义的联系!=。运算符==可能将数据写入文件,而运算符!=可能对数组进行排序。

虽然以如此任意的方式重载运算符肯定不是一个好的编程实践,但 C++ 语言不能假设任何事情。所以,不,它不能也不会自动使用! ==组合代替!=,或! >组合代替<=