Ich bin auf eine Frage gestoßen, die ich selbst nicht beantworten kann. Auch auf Google und hier habe ich keine Antwort gefunden. Sprich, ich will „ein Objekt prüfen Gültigkeit“ in eine if-Klausel, etwa so:Wenn ein Objekt sowohl `operator!` Als auch `operator bool` liefert, was im Ausdruck`! Obj` verwendet wird?
MyClass myObject;
// [some code, if any]
if (!myObject)
{
// [do something]
}
MyClass
Lassen Sie etwas wie folgt definiert werden:
class MyClass
{
public:
MyClass() { };
virtual ~MyClass() { };
bool operator!()
{
return !myBool;
};
operator bool()
{
return myBool;
};
private:
bool myBool = 0;
};
Meine Frage ist nun: die eine von Die überladenen Operatoren werden tatsächlich in dieser if-Klausel verwendet? Wie auch immer, das Ergebnis ist offensichtlich dasselbe.
Ich denke, es wird auf dem Weg des geringsten Widerstandes gehen, und rufen Sie 'Operator!' ... – StoryTeller
Denken Sie nicht über Überlastung Bool, bis Sie dies gelesen haben: http://StackOverflow.com/Questions/6242768/is-the-safe-bool-idiom-obsolete-in-c11 – Bathsheba
Ja, mach einfach den 'operator bool' und mache es explizit. Wie auch immer, 'operator!' Erfordert keine Konvertierungen. 'operator bool' erfordert eine benutzerdefinierte Konvertierung. – chris