Вопрос: Не подразумеваемые конверсии 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*
завершится с ошибкой.
Edit:
Кажется, много ответов заключается в том, что "нулевые указатели могут быть преобразованы в false
". Я понимаю это, мой вопрос касался "если я не могу напрямую вызвать operator bool()
, тогда я попробую преобразование в любой указатель".