class Test
{
public:
operator Test *() { return NULL; };
};
int main()
{
Test test;
if (test == NULL)
printf("Wtf happened here?\n");
return 0;
}
這段代碼是怎麼編譯的? Test如何獲得比較運算符?是否有一些隱含的鑄造過程?那個重載操作符甚至意味着什麼(並且做了什麼)?運算符重載「運算符T *()」產生比較運算符?
NULL是一件特別的事情嗎?我認爲它總是被定義爲0,而不是一個特殊的指針。 – 2010-11-08 23:42:09
NULL是0(在C++中),但整數立即數零是特殊情況。它可以轉換爲任何指針類型。 – 2010-11-08 23:46:29