“内联运算符T *()const”是什么意思?

时间:2017-04-16 18:35:08

标签: c++

我查看了nullptr上的一些代码并发现:

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 = {};

inline operator T*() constinline operator T C::*() const是什么意思?

它们的工作方式与inline T operator *() constinline T operator C::*() const相同吗?

为什么不在声明中指定返回类型?

1 个答案:

答案 0 :(得分:3)

它们是用户定义的转换运算符函数。

一个更简单的功能:

struct Foo
{
   inline operator int () const { return 0; }
};

鉴于您可以使用

Foo f;
int i = f; // Invokes f.operator int () and initializes i with
           // return value.

对于您的类,nullptr的匿名类,它的意思是它可以转换为任何指针或成员函数指针。您可以使用:

int* ip = nullptr;

它使用第一个用户定义的转换运算符函数的返回值来初始化ip

struct Bar
{
   void bar() {}
};

void (Bar::*ptr)() = nullptr;

它使用第二个用户定义的转换运算符函数的返回值来初始化ptr