Podsumowanie reguł zakresu
Użycie nazwy musi być jednoznaczne w zakresie (do punktu, w którym jest określane przeciążenie). Jeśli nazwa oznacza funkcję, funkcja musi być jednoznaczna w odniesieniu do liczby i typu parametrów. Jeśli nazwa pozostanie jednoznaczna, zostaną zastosowane reguły dostępu do składowych.
Inicjatory konstruktorów
Inicjatory konstruktorów są oceniane w zakresie najbardziej zewnętrznego bloku konstruktora, dla którego są określone. W związku z tym mogą używać nazw parametrów konstruktora.
Nazwy globalne
Nazwa obiektu, funkcji lub modułu wyliczającego jest globalna, jeśli jest wprowadzana poza dowolną funkcją, klasą lub prefiksem operatora globalnego zakresu jednoargumentowego (::
), a jeśli nie jest używana w połączeniu z żadnym z tych operatorów binarnych:
Rozpoznawanie zakresu (
::
)Wybór elementu członkowskiego dla obiektów i odwołań (.)
Wybór elementu członkowskiego dla wskaźników (->)
Kwalifikowane nazwy
Nazwy używane z binarnym operatorem rozpoznawania zakresu (::
) są nazywane "kwalifikowanymi nazwami". Nazwa określona po binarnym operatorie rozpoznawania zakresu musi być składową klasy określonej po lewej stronie operatora lub składowej jej klasy bazowej(es).
Nazwy określone po operatorze wyboru składowego (. lub ->) muszą być składowymi typu klasy obiektu określonego po lewej stronie operatora lub składowych jego klas bazowych. Nazwy określone po prawej stronie operatora zaznaczenia składowego (->) mogą być również obiektami innego typu klasy, pod warunkiem, że lewa strona obiektu -> jest obiektem klasy i że klasa definiuje przeciążony operator wyboru składowego (->), który ocenia wskaźnik do innego typu klasy. (Ta aprowizacja została omówiona bardziej szczegółowo w Dostęp do składowej 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 zakres bloku, w tym zakres funkcji najbardziej zewnętrznej (który obejmuje parametry funkcji).
Jeśli nazwa jest używana wewnątrz funkcji składowej, to nazwa jest wyszukiwana w zakresie klasy.
Nazwa jest wyszukiwana w klasach bazowych 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 , i wymuszają na kompilatorze
class
wyszukiwanie tylko nazwclass
,struct
lubunion
.union
struct
Nazwy po lewej stronie operatora rozpoznawania zakresu (
::
) mogą być tylkoclass
nazwami ,struct
,namespace
lubunion
.
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 odnosi się do dowolnego niestatycznego elementu członkowskiego w otaczającej klasie, zostanie wygenerowany komunikat o błędzie, ponieważ zamknięte klasy nie mają ujęć wskaźników klasy this
.
Nazwy parametrów funkcji
Nazwy parametrów funkcji w definicjach funkcji są uważane za w zakresie najbardziej zewnętrznego bloku funkcji. W związku z tym są to nazwy lokalne i opuszczają zakres po zakończeniu działania funkcji.
Nazwy parametrów funkcji w deklaracjach funkcji (prototypy) znajdują się w lokalnym zakresie deklaracji i wykraczają poza zakres na końcu deklaracji.
Parametry domyślne znajdują się w zakresie parametru, dla którego są one domyślne, zgodnie z opisem w poprzednich dwóch akapitach. Nie mogą jednak uzyskać dostępu do zmiennych lokalnych ani niestatycznych składowych klas. Parametry domyślne są oceniane w momencie wywołania funkcji, ale są oceniane w oryginalnym zakresie deklaracji funkcji. W związku z tym domyślne parametry funkcji składowych są zawsze oceniane w zakresie klasy.
Zobacz też
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla