C++:异常的运算符重载

yak*_*kov 3 c++ operator-overloading static-cast operator-keyword

运营商在这里超载了什么?

operator T * ()

我知道operator方法具有以下结构:

type operator operator-symbol ( parameter-list )

假设我们有以下代码

template<typename T> class SmartPtr
{
public:
    SmartPtr(T* data): member(data) {}
    T* member;      
    T& operator * () { return *member; }  //usage: *TObj    
    T*& operator () () { return member; }  //usage: TObj()
    operator T * () { return member; }   //usage: ???
};
Run Code Online (Sandbox Code Playgroud)

如果您在ideone上尝试它,则没有编译错误.那么这里发生了什么?

ADD:我说得static_cast<T*>(TObj)operator T *吗?我在这里试了一下.

Mik*_*our 9

这是一个转换运算符,允许将类转换为T*.用法:

T * p = TObj;
Run Code Online (Sandbox Code Playgroud)

智能指针提供这个可能是一个坏主意,因为它很容易意外地获得非智能指针.标准智能指针通过get()函数提供显式转换,以防止意外转换.