什么运营商在这里超载?
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 * ? 我在这里试过。
What an operator is overloaded here?
operator T * ()
I know that the operator method has the following structure:
type operator operator-symbol ( parameter-list )
Assume we have the following code
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: ??? };No compilation errors if you try it on the ideone. So what is going on here?
ADD: Am I right that static_cast<T*>(TObj) makes a call of the operator T *? I've tried it here.
最满意答案
这是一个转换运算符 ,它允许将类转换为T* 。 用法:
T * p = TObj;对于一个智能指针来说,这可能是一个坏主意,因为它容易意外地获得一个非智能指针。 标准智能指针通过get()函数提供显式转换,以防止意外转换。
That's a conversion operator, which allows the class to be converted to T*. Usage:
T * p = TObj;It's probably a bad idea for a smart pointer to provide this, as it makes it easy to accidentally get a non-smart pointer. Standard smart pointers provide explicit conversion via a get() function instead, to prevent accidental conversions.
更多推荐
发布评论