Warum ist * & x nicht dasselbe wie x?

8

Kurzversion:

Der folgende Code kompiliert nicht:

%Vor%

aber das tut:

%Vor%

Warum?

Vollständiger Code:

%Vor%

GetMenuString Signatur (aus atluser.h , aus WTL):

%Vor%     
Mehrdad 08.10.2011, 20:29
quelle

4 Antworten

11

Weil die unären Operatoren & und * überladen werden können, was ich denke CComBSTR .

* Aktualisierung: *

Für diejenigen, die sich fragen, wie man die Adresse einer Variablen bekommt, deren Typ operator& überladen hat, gibt es TR1's std::addressof und eine Boost-Implementierung für C ++ 03 Kompatibilität.

    
K-ballo 08.10.2011, 20:33
quelle
4

CComBSTR hat möglicherweise operator * oder operator & überladen, um einen Typ zurückzugeben, der dem von GetMenuString()

empfangenen Parametertyp entspricht

Also, während *&x gleich ist wie x für integrierte Datentypen, ist es möglicherweise nicht dasselbe für benutzerdefinierte Typen.

    
Alok Save 08.10.2011 20:33
quelle
4

operator& auf CComBSTR ist überladen und gibt BSTR* zurück, so dass Dereferenzierung gibt Ihnen den Typ, den Sie benötigen, d. h. a BSTR .

    
DeCaf 08.10.2011 20:35
quelle
0

Wenn es nicht kompiliert, dann sollten Sie eine sinnvolle Fehlermeldung haben?

Die Funktion ist wie folgt definiert und möchte BSTR& :

%Vor%

CComBSTR class wird nicht in BSTR& selbst umgewandelt, sondern durch & operator gefolgt von * operator .

    
Roman R. 08.10.2011 20:36
quelle

Tags und Links