c++中的操作符T* (T是模板形参)是什么?

What is operator T* (where T is a template parameter ) in C++?

本文关键字:形参 是什么 操作符 c++      更新时间:2023-10-16
class NullClass{
    public:
    template<class T>
        operator T*() const {return 0;}
};

我在读Effective c++的时候遇到了这个类,我实现了这个类,它编译了。我对此有一些疑问:

  1. 没有返回类型

  2. 和它的实际作用

这是类型转换操作符。它定义了类的实例和指定类型(这里是T*)之间的隐式转换。其隐式返回类型当然是相同的。

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

可以显式地使用转换操作符:

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

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