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如何获得比较运算符?是否有一些隐含的演员?那个重载运算符甚至意味着什么呢?
重载的操作者从添加了一个转换Test到Test *.由于没有定义采用Test和NULL作为参数的比较运算符,因此尝试了存在的任何转换运算符.operator Test *返回与之相当的类型NULL,因此使用它.