> nein, dann wird der "operator bool()" aufgerufen, der ist aber wohl auch
> trivial zu überladen.
Schön wär es, wenn C++ so einfach wäre. :-)
In dem Fall if(x) wird x in einen bool-Kontext konvertiert. Das kann
mittels operator bool geschehen, muss es aber nicht. Es stellt sich
sogar heraus, dass operator bool() zu überladen meistens keine so gute
Idee ist, weil man das Objekt x dann in jedem Kontext implizit in einen
bool konvertieren kann. Sowas wird dann zum Beispiel möglich:
int i = x;
Zuerst wird x implizit nach bool konvertiert, was dann implizit als int
gedeutet wird. Dass das hier Blödsinn ist, ist dem C++-Compiler egal.
Die übliche, einfache Methode ist daher anstelle operator bool den
operator void* zu überladen. Anstelle false gibt dieser operator 0
zurück und anstelle true zum Beispiel den this-Zeiger. Dann funktioniert
if(x) immer noch wie gewünscht, aber int i = x nicht mehr.
Damit geht man wenigstens den häufigsten Fallen aus dem Weg. Die
void*-Methode hat allerdings immer noch (zum Teil recht subtile)
Nachteile, weswegen kompliziertere Methoden existieren, wie zum Beispiel
operator Foo* zu überladen, wobei Foo ein "versteckter" Typ ist (etwa
eine innere Klasse im private-Teil der äußeren).