Gdzie w deklaracji można umieścić specyfikator klasy składowania?

Na przykład rozważmystatic specyfikator klasy pamięci. Oto kilka przykładów zarówno poprawnych, jak i źle ukształtowanych zastosowań tego specyfikatora klasy pamięci masowej:

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

(Deklaracje oznaczone jako „ważne” zostały zaakceptowane przez Visual C ++ 2012, g ++ 4.7.2 i Clang ++ 3.1. Deklaracje oznaczone jako „źle uformowane” zostały odrzucone przez wszystkie kompilatory.)

Wydaje się to dziwne, ponieważ specyfikator klasy pamięci odnosi się do zadeklarowanej zmiennej. Jest to zadeklarowana zmiennastatic, nie typ zadeklarowanej zmiennej. Dlaczego sąe ii źle uformowany, alek jest dobrze uformowany?

Jakie są reguły regulujące prawidłowe umieszczanie specyfikatorów klasy pamięci masowej? Kiedy użyłemstatic w tym przykładzie pytanie dotyczy wszystkich specyfikatorów klasy pamięci. Najlepiej, aby kompletna odpowiedź cytowała odpowiednie sekcje standardu językowego C ++ 11 i wyjaśniała je.

questionAnswers(3)

yourAnswerToTheQuestion