Doppelte Ausrufezeichen definieren?

Ich verstehe, was ein doppeltes Ausrufezeichen bewirkt (oder ich glaube, ich verstehe es), bin mir aber nicht sicher, wie es für ein zufälliges Objekt definiert ist. Zum Beispiel im Code-Snippet unten:

Assignment *a;
if (!getAssignment(query, a))
   return false;
hasSolution = !!a;

if (!a)
   return true;

Woher weiß ich, welchen Wert das doppelte Ausrufezeichen hat? Mit anderen Worten, konvertiert es immer in true? falsch? Oder können Sie ein Verhalten dafür definieren, z. B. das Ausführen einer Methode zur Ermittlung des Ergebnisses (woher weiß das Objekt, wie es in dieser Situation zu handeln hat)? Ich bin etwas verwirrt über diesen Code, da all diese Ausrufezeichen im Gange sind. Jede Erklärung ist erwünscht.

Hoffe ich war klar und danke.

Antworten auf die Frage(7)

Ihre Antwort auf die Frage