操作符重载(Operator Overloading)

2019-05-15  本文已影响0人  吃柠檬的鸮

一个类可以定义诸如 +/ 等操作符,使其可以像内建类型一样直接使用。

优点:重载操作符可以使代码更加直观,像内建类型如 int 那样。

缺点:

  1. 混淆直觉,很多操作并不像内建操作那样轻巧;
  2. 查找重载操作符的调用处更加困难,查找 Equal() 显然比同等调用 == 容易得多;
  3. 有的操作符可以对指针进行操作,容易导致 bug;
  4. 重载还有其他一些副作用,比如,重载操作符 & 的类不能被前置声明。

结论:
除少数特定环境外,不要重载操作符。如果需要的话,可以定义类似 Equals()CopyFrom() 等函数。

一般不要重载操作符,有其是赋值操作符(operator=)比较阴险,应避免重载。

极少数特定环境需要重载操作符以便与模板或 “ 标准 ” C++ 类衔接(如 operator<<(ostream&, const T&) ),如果被证明是正当的尚可接受,但还是要尽可能避免这样做。尤其是不要仅仅为了再 STL 容器中作为 key 使用就重载 operator==operator<,而应该再声明容器的时候,创建相等判断和大小比较的模仿类型。
确实需要重载 operator== 时,最后提供文档说明原因。

上一篇下一篇

猜你喜欢

热点阅读