1、 重载操作符必须具有至少一个类类型或枚举类型的操作数。这条规则强制重载操作符不能重新定义用于内置类型对象的操作符的含义。
2、 除了函数调用操作符operator() 之外,重载操作符时使用默认实参是非法的。
3、 赋值操作符、取地址操作符和逗号操作符对类类型操作数有默认含义。如果没有特定重载版本,编译器就自己定义以下这些操作符。
4、 赋值(=)、下标([])、调用(())和成员访问箭头(->)等操作符必须定义为成员,将这些操作符定义为非成员函数将在编译时标记为错误。像赋值一样,复合赋值操作符通常应定义为类的成员,与赋值不同的是,不一定非得这样做,如果定义非成员复合赋值操作符,不会出现编译错误。改变对象状态或与给定类型紧密联系的其他一些操作符,如自增、自减和解引用,通常就定义为类成员。对称的操作符,如算术操作符、相等操作符、关系操作符和位操作符,最好定义为普通非成员函数。
5、 一般而言,输出操作符应输出对象的内容,进行小限度的格式化,它们不应该输出换行符。
6、 类定义下标操作符时,一般需要定义两个版本:一个为非 const 成员并返回引用,另一个为 const 成员并返回 const 引用。
7、 为了与内置类型一致,前缀式操作符应返回被增量或减量对象的引用。后缀式操作符应返回旧值(即尚未自增或自减的值),并且应作为值返回,而不是返回引用。后缀式操作符函数接受一个额外的(即无用的)int 型形参。使用后缀式操作符进,编译器提供 0 作为这个形参的实参。
8、 函数调用操作符必须声明为成员函数。一个类可以定义函数调用操作符的多个版本,由形参的数目或类型加以区别。定义了调用操作符的类,其对象常称为函数对象,即它们是行为类似函数的对象。函数对象经常用作通用算法的实参。并且比普通函数更灵活。
9、 标准库提供了一组函数适配器,用于特化和扩展一元和二元函数对象。函数适配器分为如下两类:(1) 绑定器,是一种函数适配器,它通过将一个操作数绑定到给定值而将二元函数对象转换为一元函数对象。 (2) 求反器,是一种函数适配器,它将谓词函数对象的真值求反。bind1st 和 bind2nd。每个绑定器接受一个函数对象和一个值。正如你可能想到的,bind1st 将给定值绑定到二元函数对象的第一个实参,bind2nd 将给定值绑定到二元函数对象的第二个实参。标准库还定义了两个求反器:not1 和 not2。not1 将一元函数对象的真值求反,not2 将二元函数对象的真值求反。