Wo finde ich eine Beschreibung zur Verwendung von "int C :: *"?

8

In einem Stück Code finde ich etwas wie:

%Vor%

Die Frage ist, wo kann ich eine Beschreibung finden, warum die Verwendung von "int C :: *" in der Funktion test () Definition gültig ist?

    
Huang F. Lei 31.07.2011, 15:23
quelle

3 Antworten

6

Ich werde nicht beschreiben, was int C::* bedeutet, da @Charles Bailey das schon sehr gut gemacht hat. Ich werde jedoch Ihre Frage beantworten:

  

(...) warum die Verwendung von "int C :: *" im Funktionstest () gültig ist   Definition?

Der entscheidende Punkt ist, dass die Verwendung von int C::* (Zeiger auf Element vom Typ int ) genau dann gültig ist, wenn C ein Klassentyp ist. Sonst ist der Typ int C::* schlecht gebildet.

Deshalb haben Sie

%Vor%

und höchstwahrscheinlich irgendwo unter

%Vor%

Wenn test<T>(0) vom Compiler gesehen wird, untersucht es die Kandidaten für test . Es findet zwei:

%Vor%

Der erste hat Vorrang vor dem zweiten, weil 1) beide Vorlagenfunktionen sind und 2) die Ellipse zuletzt nachgeschlagen wird. Wenn der erste schlecht formatiert ist (dh genau dann, wenn C kein Klassentyp ist), wird er einfach verworfen und die zweite Überladung wird genommen. Dieses Verhalten hat den Spitznamen SFINAE (Substitutionsfehler ist kein Fehler).

Testen Sie die Größe des Rückgabetyps (denken Sie daran, dass sizeof(char) immer 1 ist), Sie können zur Kompilierzeit feststellen, welche test verwendet wird, d. ob T ein Klassentyp ist oder nicht.

    
Alexandre C. 31.07.2011, 15:54
quelle
10

int C::* ist ein Zeiger auf ein Mitglied von C vom Typ int . Suchen Sie nach "Zeiger zu Mitglied". Der Abschnitt des Standards (ISO / IEC 14882: 2003), der sich mit dieser Deklarationssyntax befasst, ist 8.3.3 Pointer to members [dcl.mptr].

Beispielverwendung.

%Vor%     
Charles Bailey 31.07.2011 15:25
quelle
2

Es ist ein Zeiger auf Mitglied.
Ein einfaches Beispiel zum Verständnis von Zeiger auf Mitglied .

%Vor%     
Alok Save 31.07.2011 15:27
quelle

Tags und Links