More Effective C++读书笔记19

Item 21:通过重载避免隐式类型转换

    如果是自定义类型进行隐式的类型转换,肯定会调用构造和析构函数,这样就一定会有一定的开销,那么如何避免这类隐式类型转换呢?21小节给出一个方式就是通过重载函数避免进行隐式类型转换。

class UInt 
{
public:
    const UInt operator+(const UInt& lrs, const UInt& hrs);
};

UInt a, b, c;
a = b + 10;
    在计算b+10的时候,编译器会将10隐式的转为UInt类型进行计算,这种情况下可以通过重载操作法来避免出现隐式转换的开销。当然是必要时候才会采取这种方法,如果不是性能瓶颈,那么有可能造成重载函数过多,而维护起来会很不方便。

    注意一种情况const UPInt operator+(int lhs, int rhs);   这种情况是错误的。在C++中有一条规则是每一个重载的operator必须带有一个用户定义类型(user-defined type)的参数。

Item 22:考虑用运算符的赋值形式(op=)取代其单独形式(op)

    在这一小节我个人来说学到了一点,那就是操作符重载中尽量能让实现能“集成”,不要所有实现都重新实现一遍,这样可以减少维护费用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值