Udostępnij za pośrednictwem


Punkt deklaracji

Nazwa jest uważana za zadeklarowaną niezwłocznie po jej deklaratorze, ale przed jej (opcjonalnym) inicjatorem. (Aby uzyskać więcej informacji dotyczących deklaratorów, zobacz Deklaratory.) Moduł wyliczający jest uważany za zadeklarowany niezwłocznie po identyfikatorze, który go nazywa, ale przed jego (opcjonalnym) inicjatorem.

Spójrzmy na następujący przykład:

// point_of_declaration1.cpp
// compile with: /W1 
double dVar = 7.0;
int main()
{
   double dVar = dVar;   // C4700
}

Jeśli punkt deklaracji miał miejsce po inicjacji, to lokalne dVar zostanie zainicjowane na 7.0, wartość zmiennej globalnej dVar.Niemniej jednak, ponieważ nie jest tak w tym przypadku, dVar jest inicjowana jako wartość undefined.

Moduły wyliczające przestrzegają tej samej zasady.Jednakże, moduły wyliczające są eksportowane do otaczającego zakresu wyliczenia.W poniższym przykładzie, zadeklarowane są moduły wyliczające Spades, Clubs, Hearts i Diamonds.Ponieważ moduły wyliczające są eksportowane do otaczającego zakresu, uważa się, że mają zakres globalny.Identyfikatory w przykładzie zostały już zdefiniowane w zakresie globalnym.

Rozważ następujący kod.

const int Spades = 1, Clubs = 2, Hearts = 3, Diamonds = 4;
enum Suits
{
    Spades = Spades,     // error
    Clubs,               // error
    Hearts,              // error
    Diamonds             // error
};

Ponieważ identyfikatory, w poprzednim kodzie są już zdefiniowane w zakresie globalnym, generowany jest komunikat o błędzie.

[!UWAGA]

Używanie tej samej nazwy, aby odwołać się do więcej niż jednego elementu programu — na przykład, modułu wyliczającego i obiektu — jest uważane za złą praktykę programowania i powinno się tego unikać.W poprzednim przykładzie, taka praktyka powoduje błąd.

Zobacz też

Informacje

Zakres