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

use*_*516 8 c++ operator-overloading

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

};
Run Code Online (Sandbox Code Playgroud)

我正在阅读有效的C++,我遇到了这个类,我实现了这个类,它编译.我对此有些疑惑:

  1. 它没有返回类型.

  2. 这是什么运营商.

  3. 它实际上做了什么.

Que*_*tin 11

那是类型转换运算符.它定义了类的实例和指定类型(此处T*)之间的隐式转换.它的隐式返回类型当然是相同的.

这里NullClass,当提示转换为任何指针类型时,实例将产生从0所述类型的隐式转换,即该类型的空指针.

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

template<class T>
explicit operator T*() const {return 0;}
Run Code Online (Sandbox Code Playgroud)

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