Je suis sûr que certaines de mes questions ont déjà été posées, alors faites le moi savoir :).Surcharge de l'opérateur et conversion implicite en bool par rapport à l'idiome de sécurité booléen
D'abord, un exemple:
#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()
est appelé, mais je ne sais pas exactement ce qui se passe ici. Je suppose que le compilateur cherche une conversion d'un A
à bool
et trouve operator functptr
ce qui est correct, mais comment fonctionne la conversion avec des pointeurs sur les fonctions membres?
De plus, si je l'ai changé operator funcptr()
à operator int A::*()
il serait également fonctionner, mais ne operator void A::*
pas (je reçois cannot declare pointer to 'void' member
), quelle est la règle que je suis absent là? (Mes questions sont principalement liées à essayer de comprendre pleinement l'idiot de bool sécurité)
En outre, si j'ai déclaré operator bool()
il aurait préséance, alors quelles sont les règles de préséance?
C'est votre travail de retourner un 'funcptr' de' opérateur funcptr' par la manière –
@SethCarnegie: Bon, c'est juste un exemple illustrant mes questions. –