1、重载箭头操作符必须返回指向类类型的指针,或者返回定义了自己的箭头操作符的类类型对象。
2、同时定义前缀式操作符和后缀式操作符存在一个问题:它们的形参数目和类型相同,普通重载不能区别所定义的是前缀式操作符还是后缀式操作符。为了解决这个问题,后缀式操作符函数接受一个额外的(即无用的)int型形参。使用后缀式操作符时,编译器提供0作为这个形参的实参。
3、如果cpplive是一个vector<string>对象,以下代码:
sort(cpplive.begin(), cpplive.end(), greater<string>());
将按降序对vector进行排序。第三个参数用于传递比较元素的谓词函数。该实参是greater<string>类型的临时对象,是一个将>操作符用于两个string操作数的函数对象。
4、标准库提供了一组函数适配器,用于特化和扩展一元和二元函数对象。函数适配器分为一下两类:(1)绑定器 ,是一种函数适配器,它通过将一个操作数绑定到给定值而将二元函数对象转换为一元函数对象。(2)求反器,是一种函数适配器,它将谓词函数对象的真值求反。
count_if(cpplive.begin(), cpplive.end(), bind2nd(less_equal<int>(), 10)); count_if(cpplive.begin(), cpplive.end(), not1(bind2nd(less_equal<int>(), 10)));
5、转换函数采用如下通用形式:operator type();这样,type表示内置类型名、类类型或由类型别名所定义的名字。对任何可作为函数返回类型的类型(除了void之外)都可以定义转换函数。一般而言,不允许转换为数组或者函数类型,转换为指针类型(数据和函数指针)以及引用是可以的。
6、虽然转换函数不能指定返回类型,但是每个转换函数必须显式返回一个指定类型的值。例如,operator int 返回一个int值;如果定义operator CppLive,它将返回一个CppLive对象,诸如此类。
7、类类型缓缓之后不能再跟另一个类类型转换。如果需要多个类类型转换,则代码将出错。
8、定义一个转换操作符将能代替定义48个(甚至更多)重载操作符(即运算符重载),类实现者的工作就简单多了。
9、避免二义性最好的方法是,保证最多只有一种途径将一个类型转换为另一类型。做到这一点,最好的办法是限制转换操作符的数目,尤其是,到一种内置类型应该只有一个转换。
除非注明,文章均为CppLive 编程在线原创,转载请注明出处,谢谢。