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;