Bedingungsoperator "?:" und LPCTSTR im Funktionskopf

8

Vielleicht kann mir das jemand erklären:

%Vor%

Und ich nannte die Funktion so:

%Vor%

Und 'sData' innerhalb der Funktion ist nie NULL, es ist immer leere Zeichenfolge, aber nicht NULL, warum? Eddited Code wie folgt:

%Vor%

In diesem Fall funktioniert es korrekt.

    
Ramunas 07.09.2016, 14:02
quelle

3 Antworten

5

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.

    
molbdnilo 07.09.2016, 14:27
quelle
5

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.

    
Pete Becker 07.09.2016 14:10
quelle
1

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.

    
Edwin Buck 07.09.2016 14:08
quelle

Tags und Links