来自维基的代码:
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 = {};
代码第一个函数好理解:返回T*类型的隐式转化,将nullptr隐式转化为T*类型。
代码第二个函数经过一番思考才理解清楚:该函数仍然是隐式转化,将nullptr转化为 T C::* 类型。该类型是什么意思呢?类成员指针。
看一个普通类成员指针的例子:
class A{
public:
A(int i = 10){ a = i; }
int a;
int getA(){ return a; };
};
int A::* pa = &A::a;
在这里pa被定义为指向A类中int成员的指针,pa指向A中a成员。
指向类成员函数的指针:int (A::* pafun)();这里定义了pa为一个类A的成员函数指针,函数返回值为int,参数列表为空;pafun = &A::getA;则指向类成员函数getA;
成员指针,成员函数指针的使用:
A test;则
test.*pa == 10;
test.*pafun() == 10;