自定义" nullptr",但如何理解代码?

时间:2017-04-01 02:27:06

标签: c++ c++11 templates nullptr

来自维基百科,如果我们的编译器不支持c ++ 11,我们可以自己实现,如下所示:

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

    template<class C, class T>
    inline operator T C::*() const
        { return 0; }

private:
    void operator&() const;
} nullptr = {};

我无法理解上述代码。

----------------------更新------------------

对不起,我没有表达清楚。

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

 template<class C, class T>
    inline operator T C::*() const
        { return 0; }

以上代码,我不懂语法。 我之前从未见过这种模板形式。(例如&#34;运算符T C :: *()&#34;)

1 个答案:

答案 0 :(得分:3)

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

表示类型nullptr_t的对象可以隐式转换为任何(非成员)指针类型。对于任何类型operator T *(),它只是一个T *函数(转换为T类型)。

template<class C, class T>
inline operator T C::*() const
    { return 0; }

表示类型为nullptr_t的对象可以转换为指向任何类型的任何类(模板参数C)的非静态成员的指针(模板参数T

两个运算符都是const,因此无法更改nullptr_t对象。