重载运算符的返回类型应与内置运算符相符
6.8.2 ID_illOperatorRetType
为了便于调用者使用,并满足泛型编程的要求,重载运算符的返回类型应与内置运算符相符:
- 比较和逻辑运算符应返回 bool 型对象
- 算术和位运算符应返回相关类的对象
- 符号运算符 +、- 应返回相关类的对象
- 后置 ++、-- 运算符应返回相关类的对象
- 前置 ++、-- 运算符应返回相关类的引用
- 下标运算符 [ ] 应返回相关类的引用
- 赋值及复合赋值运算符应返回相关类的引用
示例:
struct A {
int operator < (const A&); // Non-compliant
};
例中重载的比较运算符返回 int 型对象,而内置比较运算符的结果为 bool 型,重载运算符的行为和内置运算符不一致会导致意料之外的错误,相关对象也可能无法被通用泛型算法接受。
应改为:
struct A {
bool operator < (const A&); // Compliant
};