来自维基百科,如果我们的编译器不支持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;)
答案 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
对象。