对于C ++中的运算符重载,应遵循3条基本规则。像所有此类规则一样,也有例外。这三个规则是-
1. 只要运算符的含义不明确且无可争辩,就不应重载。而是为函数提供一个精心选择的名称。从根本上讲,重载运算符的首要原则是:
不要这样
这似乎很奇怪,但是在少数情况下,适合使用运算符重载。原因是,除非运算符在应用程序域中的使用众所周知且无可争议,否则很难理解运算符应用程序背后的语义。
2. 始终遵守运算符的众所周知的语义。C ++对覆盖的运算符的语义没有任何限制。您的编译器可以很高兴地实现实现二进制+运算符的代码,以根据其正确数量进行估算。但是,此类关联运算符的用户永远不会怀疑表达式a + b从b中减去a。
3. 始终提供一组相关操作中的所有内容。
运算符彼此相关,并且与其他操作相关。如果您的类型支持a + b,则用户也希望能够调用+ = b。如果它支持前缀增量++ a,他们将期望a ++也能正常工作。如果他们能够检查a <b,那么他们肯定会期望也能够检查a> b。如果他们可以复制构造您的类型,则希望分配也能正常工作。
在大多数情况下,您不需要运算符来重载,并且仅应在定义了运算符并且非常适合情况后重载运算符。这篇文章的灵感来自https://stackoverflow.com/a/4421708/3719089。