Pytanie: Czy niejawne konwersje bool zawsze polegają na próbie niejawnej konwersji na void*
? (Jeśli taka funkcja konwersji istnieje dla typu). Jeśli tak, dlaczego?C++, czy konwersja bool zawsze wraca do niejawnej konwersji na void *?
Rozważmy następujący krótki program:
#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;
}
Wynikiem tego programu jest:
operator void*() const
False
znaczenie, funkcję konwersji do void*
nazwano. Jeśli otagujemy kwalifikator explicit
przed funkcją konwersji, wówczas niejawna konwersja na void*
może się nie powieść.
Edit: Wydaje się, że wiele odpowiedzi "null wskaźniki mogą być konwertowane do false
". Rozumiem to, moje pytanie dotyczyło "jeśli nie mogę bezpośrednio wywołać operator bool()
, wtedy spróbuję konwersji do dowolnego wskaźnika".
"postara konwersję do dowolnego wskaźnika" - 'void' wskaźnik nie jest" dowolny "wskaźnik. Wskaźnik 'void' jest wskaźnikiem' void', nic więcej. Akceptuje tylko adresy wszystkich typów. – xinaiz
@ BlackMoney Miałem na myśli dowolny typ wskaźnika, który rzeczywiście wydaje się być w przypadku, biorąc pod uwagę akceptowaną odpowiedź. – jensa
@JesperJuhl To nie jest głupie pytanie. Pyta o to, czy kompilator może to zrobić, i o uzasadnienie. Może to być dla ciebie oczywiste, ale dla początkujących i średnio zaawansowanych deweloperów może to być mylące. –