C++:不寻常的运算符重载

标签 c++ operator-overloading operator-keyword static-cast

这里重载了什么运算符?

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: ???
};

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

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

最佳答案

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

T * p = TObj;

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

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

相关文章:

c++ - 奇怪的一段代码

c++ - gRPC - C++ 异步 HelloWorld 客户端示例不异步执行任何操作

c++ - 如何在 C++ 中重载非交换运算符的两种可能性?

C++ 不通过其他方法保存更改

c++ - 同一运算符和类的两个重载函数

c++ - std::map:使用键类以外的参数重载 operator<

c++ - 声明类变量后调用构造函数

python - 在 Python 中覆盖 'not' 运算符

function - Haskell 运算符与函数优先级

c++ - (C++) 在结构中存储数组