什么是C ++中的运算符T *(其中T是模板参数)?

时间:2014-07-31 13:41:44

标签: c++ operator-overloading

class NullClass{
    public:
    template<class T>
        operator T*() const {return 0;}

};

我正在阅读Effective C ++并且遇到了这个类,我实现了这个类并且它编译了。我对此有一些疑问:

  1. 它没有返回类型。

  2. 这是什么操作员。

  3. 以及它实际上做了什么。

1 个答案:

答案 0 :(得分:11)

那是类型转换运算符。它定义了类的实例与指定类型(此处为T*)之间的隐式转换。它的隐式返回类型当然是一样的。

此处NullClass实例在提示转换为任何指针类型时,将产生从0到所述类型的隐式转换,即该类型的空指针。

另外,转换运算符可以明确:

template<class T>
explicit operator T*() const {return 0;}

这可以避免隐式转换(可能是错误的微妙来源),但允许使用static_cast