Dies liegt daran, dass sowohl der zweite als auch der dritte Operand in einen gemeinsamen Typ konvertiert werden müssen (Das Ergebnis kann nicht unterschiedliche Typen haben, je nachdem, ob die Bedingung wahr ist oder nicht.)
Der erste Parameter entspricht
%Vor% seit NULL
hat keinen Typ, in den Sie CString
umwandeln.
Und CString(NULL)
erstellt ein leeres CString
.
Die zweite entspricht
%Vor% da CString
in LPCTSTR
konvertierbar ist, aber nicht umgekehrt.
Einfügen der Besetzung,
%Vor%sollte die gleiche Wirkung wie die zweite haben.
Der bedingte Operator konvertiert sein zweites und drittes Argument in einen Typ, der beiden gemeinsam ist. Ich kenne die Details von CString
nicht, also ist dies nur eine Vermutung, aber es sieht so aus, als ob der Bedingungsoperator NULL
in ein CString
umwandelt, um dem Typ des dritten Arguments zu entsprechen, und übergibt dies an implizite Konvertierung in LPCTSTR
zur Funktion.
Auf den ersten Blick stelle ich mir das vor.
%Vor%würde auch funktionieren, und wenn dies der Fall ist, haben Sie wahrscheinlich ein Typcasting-Problem, das vom
behoben wurde %Vor% Zuweisung, weil es den Typ LPCTSTR
mit dem Wert von null verknüpfen wird, wenn strNull
später aufgerufen wird.