Я недавно изучаю C ++ и заметил пример cppreference , часть которого выглядит следующим образом:
struct B
{
explicit B(int) { }
explicit operator bool() const { return true; }
};
int main()
{
B b2(2); // OK: direct-initialization selects B::B(int)
if (b2) ; // OK: B::operator bool()
}
Введение в неявные преобразования говоритme "когда выражение используется в операторе if или цикле", результат этого выражения (b2) будет неявно преобразован в тип bool
.
Кроме того, введение в явный спецификатор сообщает мне, если «функция преобразования является явной, ее нельзя использовать для неявных преобразований».
Поскольку b2 будет неявно преобразована в if(b2)
, а функция преобразования будет explicit
, как получается if(b2)
в порядке?