这里重载了什么运算符?
operator T * ()
我知道操作符方法具有以下结构:
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: ???
};

如果您在 ideone 上尝试,则不会出现编译错误。那么这里发生了什么?

ADD: static_cast<T*>(TObj) 调用 operator T * 对吗?我试过了 here

最佳答案

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

T * p = TObj;

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

关于C++:不寻常的运算符重载,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21432003/

10-15 11:41