运算符重载"运算符T*()"会产生比较运算符吗?

Oli*_*eng 4 c++ operator-overloading

class Test
{
public:
    operator Test * () { return NULL; };
};

int main()
{
    Test test;
    if (test == NULL)
        printf("Wtf happened here?\n");

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这段代码是如何编译的?Test如何获得比较运算符?是否有一些隐含的演员?那个重载运算符甚至意味着什么呢?

Baf*_*ois 7

重载的操作者从添加了一个转换TestTest *.由于没有定义采用TestNULL作为参数的比较运算符,因此尝试了存在的任何转换运算符.operator Test *返回与之相当的类型NULL,因此使用它.