問題:隱式bool轉換總是回退到試圖隱式轉換爲void*
? (如果這種類型的轉換功能存在)。如果是這樣,爲什麼?C++,bool轉換總是回退到隱式轉換爲void *?
考慮下面的短程序:
#include <iostream>
class Foo{
public:
operator void*() const
{
std::cout << "operator void*() const" << std::endl;
return 0;
}
};
int main()
{
Foo f;
if(f)
std::cout << "True" << std::endl;
else
std::cout << "False" << std::endl;
return 0;
}
該程序的輸出是:
operator void*() const
False
含義,變換函數到void*
被調用。 如果我們在轉換函數前標記了explicit
限定符,則隱式轉換爲void*
將失敗。
編輯: 看來很多答案都是「空指針可以轉換爲false
」。我理解這一點,我的問題是關於「如果我不能直接調用operator bool()
,那麼我會嘗試轉換爲任何指針」。
「將嘗試轉換爲任何指針」 - 'void'指針不「任何「指針。 'void'指針是'void'指針,沒有別的。它只接受任何類型的地址。 – xinaiz
@BlackMoses我的意思是任何指針類型,在接受的答案中的確如此。 – jensa
@JesperJuhl這不是一個愚蠢的問題。它詢問是否允許編譯器這樣做,以及它背後的推理。這對你來說可能相當明顯,但對於初學者到中級開發者來說,這可能會讓人困惑。 –