C++编程思想之运算符重载

class A
{
public:
int* a;
public:
operator bool()
{
if(a != NULL)
return true;
else
return false;
}
}

int main()
{
A aa;
if(aa){
}else{
}

这个地方if(aa),一开始不懂aa是咋转换成bool类型的,后来看到运算符重载,起初认为重载了 (),后来才知道这其实是重载bool类型,将类型aa自动换换成bool类型。要与这种
bool operator +(int a)相区别,operator前面是返回类型,重载了+。
今天看boost库的实现,看到ref库,同样使用了该重载的方式用于隐士类型转换。boost::ref库定义了一个很小很简单的引用类型的包装器,reference_wrapper,定义如下
template
class reference_wrapper
{
public:
explicit reference_wrapper(T& t) : t_(&t) {}
operator T& () const {return *t_}
T& get() const {return *t_}
T* get_pointer() const {return t_;}
private:
T* t_;
};

使用示例:
int x = 0;
reference_wrapper rw(x);
assert(x == rw); //operator T&隐士类型转换
(int&) wr = 100;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值