Nazwy i nazwy kwalifikowane
Nazwy używane z binarnym operatorem rozwiązywania zakresu (::) są nazywane "nazwami kwalifikowanymi". Nazwa określona po binarnym operatorze rozwiązywania zakresu musi być elementem członkowskim klasy określonej po lewej stronie operatora lub elementem członkowskim jej klas podstawowych.
Nazwy określone po operatorze wyboru elementu członkowskiego (. lub –>) muszą być elementami członkowskimi klasy o typie obiektu określonego po lewej stronie operatora lub elementami członkowskimi jej klas podstawowych.Nazwy określone po prawej stronie operatora wyboru elementu członkowskiego (–>) mogą być również obiektami typu innej klasy, pod warunkiem, że lewa strona operatora –> jest obiektem klasy, która definiuje przeciążony operator wyboru elementu członkowskiego (–>), który jest obliczany do wskaźnika do typu innej klasy. (To zastrzeżenie zostało dokładniej omówione w Dostęp do elementu członkowskiego klasy).
Kompilator wyszukuje nazwy w następującej kolejności, zatrzymując się, gdy nazwa zostanie znaleziona:
Bieżący blok zakresu, jeśli nazwa jest używana wewnątrz funkcji; w przeciwnym przypadku, zakres globalny.
Na zewnątrz, przez każdy otaczający blok zakresu, łącznie z zakresem najbardziej zewnętrznej funkcji (która zawiera argumenty funkcji).
Jeśli nazwa jest używana wewnątrz funkcji członkowskiej, to nazwa jest wyszukiwana w zakresie klasy.
Nazwa jest wyszukiwana w klasa podstawowych klasy.
Przeszukiwany jest otaczający, zagnieżdżony zakres klasy (jeśli istnieje) oraz jego klasy podstawowe.Wyszukiwanie jest kontynuowane, dopóki nie zostanie przeszukany najbardziej zewnętrzny, otaczający zakres klasy.
Przeszukiwany jest zakres globalny.
Jednakże, możesz wykonać następujące modyfikacje kolejności wyszukiwania:
Nazwy poprzedzone operatorem :: wymuszają rozpoczęcie wyszukiwania od zakresu globalnego.
Nazwy poprzedzone słowami kluczowymi class, struct i union wymuszają na kompilatorze wyszukiwanie tylko nazw class, struct lub union.
Nazwy po lewej stronie operatora rozwiązywania zakresu (::) mogą być tylko nazwami class, struct, namespace lub union.
Jeśli nazwa odwołuje się do niestatycznego elementu członkowskiego, ale jest używana w statycznej funkcji członkowskiej, to wygenerowany zostanie komunikat o błędzie.Podobnie, jeśli nazwa odwołuje się do dowolnego, niestatycznego elementu członkowskiego w otaczającej klasie, wygenerowany zostanie komunikat o błędzie, ponieważ klasy otaczające nie posiadają wskaźnika otaczającej klasy this.