Freigeben über


C++-abstrakte Deklaratoren

Ein abstrakter Deklarator handelt es sich um einen Deklarator, in dem der Bezeichner fehlt.(Weitere Informationen finden Sie unter Typnamen und nicht abstrakte), während DeklaratorenDeklaratoren in der Deklaration von Objekten oder Funktionen verwendet werden, den Bezeichner können nur die Typinformationen ein Paket entfernen.Daher sind abstrakte Deklaratoren die Auswirkung einer Änderung eines Basistyps wie char , um weitere komplexen Typ wie Zeiger, um zu verkohlen oder Array von Zeichen anzugeben.Daher werden sie stets in Kombination mit einem Basistyp Namen verwendet und nur verwendet, wenn ein Zeiger, ein Array oder ein Referenztyp aufgerufen wird (einschließlich der Zeiger für diesen zu arbeiten, Basistyp zurück).Die abstrakten Deklaratoren nach dem folgenden werden in diesem Abschnitt erörtert:

Ein abstrakter Deklarator handelt es sich um einen Deklarator, der keinen Namen deklariert — der Bezeichner wird beibehalten.Beispiel:

char * 

Gibt den Typ pointer auf, um chareinzugeben.Der Typname besteht aus dem Namen des Basistyps char plus den abstrakten Deklarator *.

Entsprechend ist die abstrakte Deklarator als Referenz der & Operator und einen Arraytyp ist mit Klammern angegeben.Jeder Typ wird angegeben werden, indem einfach die Syntax für den Deklarator und den Bezeichner entfernt.

char &   // reference to char
char[5] // array of char

Im Folgenden finden Sie ein schwierigerer Verwendung eines abstrakten Deklarator, der den Typ pointer an eine Funktion deklariert, die zwei Argumente akzeptiert sowohl vom Typ **char ***und **char ***Typ zurückgibt:

char * (*)( char *, char * )

In Kombination mit dem Parameterbezeichner deklarieren abstrakte Basistyp Deklaratoren vollständig Typ.Ruft den Typnamen, die von der abstrakten Deklaratoren erstellt werden, werden an einer beliebigen Stelle ein Typ verwendet werden für aufgerufen wird:

// Get the size of array of 10 pointers to type char.
size_t nSize = sizeof( char *[10] );
// cast fptr to pointer to function that takes two arguments, both of type
// pointer to char
 i = (char * (*)(char*, char*)) fptr; 

Typedef-Spezifizierer kann verwendet werden, um die lästige Syntax von abstrakten Deklaratoren überprüfen zu vermeiden.

Siehe auch

Referenz

Deklaratoren