《More Effective C++》+《Effective C++》,两本经典双剑合璧,必然威力无穷。
Item M5 谨慎定义类型转换函数
1. 两种函数允许编译器进行"自定义类型"转换:单参数构造函数和隐式类型转换运算符。2. 单参数构造函数是指只用一个参数即可以调用的构造函数。该函数可以是只定义了一个参数,也可以是虽定义了多个参数但第一个参数以后的所有参数都有缺省值。
3. 隐式类型转换运算符是一个成员函数:operator 关键字,其后跟一个类型和符号;不用定义函数的返回类型,因为返回类型就是这个函数的名字。
4. 类型转换函数的根本问题是:当你在不需要使用转换函数时,这些的函数缺却会被调用运行;这些不正确的程序会做出一些意想不到的事情,而你又很难判断出原因。
5. 隐式类型转换符存在会导致错误的发生;解决方法是不使用语法关键字的等同函数来替代转换运算符。
[使用显式转换函数代替隐式类型转换符]
6. 为了解决隐式类型转换(单参构造函数)而特别引入explicit;构造函数用explicit 声明,如果这样做,编译器会拒绝为了隐式类型转换而调用构造函数。
7. 解决隐式类型转换(单参构造函数)的另外一种方法是:使用Proxy类,Proxy 对象能帮忙更好地控制软件的在某些方面的行为。
8. 让编译器进行隐式类型转换所造成的弊端要大于它所带来的好处,所以除非你确实需要,不要定义类型转换函数。
[这一小节参考总结“