Zakres
Nazwy języka C++ mogą być używane tylko w niektórych regionach programu.Obszar ten jest nazywany "zakresem" nazwy.Zakres określa "okres istnienia" nazwy, która nie oznacza obiektu o rozmiarze statycznym.Zakres określa również widoczność nazwy, gdy konstruktory i destruktory klasy są wywoływane i zmienne lokalne dla zakresu są zainicjowane. (Aby uzyskać więcej informacji, zobacz Konstruktory i Destruktory). Istnieje pięć rodzajów zakresów:
Zakres lokalny nazwa zadelarowana wewnątrz jest dostępna tylko w ramach tego bloku i blokach ujętych przez nią i tylko po punkcie deklaracji.Nazwy formalnych argumentów funkcji w zakresie peryferyjnego bloku funkcji mają zakres lokalny, jak gdyby zostały zadeklarowane wewnątrz bloku, wewnątrz treści funkcji.Rozważ następujący fragment kodu:
{ int i; }
Ponieważ deklaracja i jest w bloku ujęta w nawiasy klamrowe, i ma zakres lokalny i nigdy nie jest dostępna, ponieważ żaden kod nie uzyskuje dostępu do niej przed nawiasem klamrowym zamykającym.
Funkcja zakres etykietuje tylko nazwy, które mają zakres funkcji.Może być używana w dowolnym miejscu w obrębie danej funkcji, ale nie jest dostępna poza tą funkcją.
Zakres pliku zakres pliku jest dowolna nazwą zadeklarowaną na zewnątrz wszystkich bloków lub klas.Jest dostępny wszędzie w jednostce translacji po jej zadeklarowaniu.Nazwy z zakresu plików, które nie są deklarowane jako obiekty statyczne są często nazywane nazwami globalnymi.
W języku C++ zakres pliku jest również znany jako zakres obszaru nazw.
Klasa zakres nazywa członków klasy mających zakres klasy.Funkcje składowe klasy są dostępne tylko przy użyciu operatorów wybranych elementów członkowskich (. lub —>) lub operatorów wskaźnik do członków (. * lub —>*) do obiektu lub wskaźnika do obiektu tej klasy; dane elementu członkowskiego niestatycznego klasy są traktowane jako lokalny obiekt tej klasy.Rozważ następującą deklarację klasy:
class Point { int x; int y; };
Członkowie klasy x i y są brane pod uwagę za w zakresie klasy Point.
Zakres prototyp nazwy zadeklarowane w prototypie funkcji są widoczne tylko do końca prototypu.Następujący prototyp deklaruje trzy nazwy (strDestination, numberOfElements i strSource); te nazwy wykraczają poza zakres na końcu prototypu:
errno_t strcpy_s( char *strDestination, size_t numberOfElements, const char *strSource );