这里重载了什么运算符?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/