Я уверен, что некоторые из моих вопросов, возможно, задавались раньше, поэтому, пожалуйста, дайте мне знать:).
Сначала пример:
#include <iostream>
struct A
{
typedef void (A::*funcptr)();
operator funcptr() {
std::cout << "funcptr" << std::endl;
}
};
int main()
{
A a;
if (a) {}
}
На if(a)
, operator funcptr()
вызывается, но я не совсем уверен, что здесь происходит. Я предполагаю, что компилятор ищет преобразование из A
в bool
и находит operator functptr
, что нормально, но как преобразование работает с указателями на функции-члены?
Кроме того, если бы я изменил operator funcptr()
на operator int A::*()
, это бы тоже сработало, но operator void A::*
не (получаю cannot declare pointer to 'void' member
), какое правило я там пропускаю? (Мои вопросы в основном касаются попыток полностью понять идиому безопасного bool)
Кроме того, если бы я объявил operator bool()
, это бы имело приоритет, так каковы правила приоритета?