操作符重载(Operator Overloading)
2019-05-15 本文已影响0人
吃柠檬的鸮
一个类可以定义诸如 +
、/
等操作符,使其可以像内建类型一样直接使用。
优点:重载操作符可以使代码更加直观,像内建类型如 int
那样。
缺点:
- 混淆直觉,很多操作并不像内建操作那样轻巧;
- 查找重载操作符的调用处更加困难,查找 Equal() 显然比同等调用 == 容易得多;
- 有的操作符可以对指针进行操作,容易导致 bug;
- 重载还有其他一些副作用,比如,重载操作符
&
的类不能被前置声明。
结论:
除少数特定环境外,不要重载操作符。如果需要的话,可以定义类似 Equals()
、CopyFrom()
等函数。
一般不要重载操作符,有其是赋值操作符(operator=)比较阴险,应避免重载。
极少数特定环境需要重载操作符以便与模板或 “ 标准 ” C++ 类衔接(如 operator<<(ostream&, const T&)
),如果被证明是正当的尚可接受,但还是要尽可能避免这样做。尤其是不要仅仅为了再 STL 容器中作为 key
使用就重载 operator==
或 operator<
,而应该再声明容器的时候,创建相等判断和大小比较的模仿类型。
确实需要重载 operator==
时,最后提供文档说明原因。