Wo darf in einer Erklärung ein Speicherklassenbezeichner stehen?
Betrachten wir zum Beispiel dasstatic
Speicherklassenbezeichner. Hier sind einige Beispiele für gültige und unsachgemäße Verwendungen dieses Speicherklassenspezifizierers:
static int a; // valid
int static b; // valid
static int* c; // valid
int static* d; // valid
int* static e; // ill-formed
static int const* f; // valid
int static const* g; // valid
int const static* h; // valid
int const* static i; // ill-formed
typedef int* pointer;
static pointer j; // valid
pointer static k; // valid
(Die als "gültig" gekennzeichneten Deklarationen wurden von Visual C ++ 2012, g ++ 4.7.2 und Clang ++ 3.1 akzeptiert. Die als "falsch" gekennzeichneten Deklarationen wurden von all diesen Compilern abgelehnt.)
Dies erscheint merkwürdig, da der Speicherklassenspezifizierer auf die deklarierte Variable angewendet wird. Dies ist die deklarierte Variablestatic
, nicht der Typ der deklarierten Variablen. Warum sinde
undi
schlecht geformt, aberk
ist wohlgeformt?
Welche Regeln gelten für die gültige Platzierung von Speicherklassenspezifizierern? Während ich benutzt habestatic
In diesem Beispiel gilt die Frage für alle Speicherklassenbezeichner. Eine vollständige Antwort sollte vorzugsweise relevante Abschnitte des C ++ 11-Sprachstandards zitieren und erläutern.