Więcej
Zastąpiłby ' :: ' przez ' . ' stworzyć niejasności w C++?
W C++, operator ::
jest używany do dostępu do klas, funkcji i zmiennych w przestrzeni nazw lub klasie.
Gdyby specyfikacja języka używała .
zamiast ::`` w takich przypadkach, jak przy dostępie do zmiennych/metod instancji obiektu, to czy spowodowałoby to ewentualne niejasności, których nie ma w
::`?
Biorąc pod uwagę, że C+++ nie pozwala na nazwy zmiennych, które są również nazwami typów, nie mogę myśleć o przypadku, w którym mogłoby się to zdarzyć.
Wyjaśnienie: Nie pytam, dlaczego ::
został wybrany ponad .
, tylko jeśli to też mogło zadziałać?
75
4
Ze względu na próby uczynienia C++ przeważnie kompatybilnym z istniejącym kodem C (co pozwala na kolizje nazw pomiędzy nazwami obiektów i znacznikami struktury), C+++ pozwala na kolizje nazw pomiędzy nazwami klas i nazwami obiektów.
Co oznacza, że:
to kodeks legalny.
Przykład, w którym oba są ważne, ale odnoszą się do różnych obiektów:
Istnieje różnica pomiędzy
a::b
ia.b
gdzie::
implikuje, żea
jest używana jako przestrzeń nazw, co oznacza, że jest to przestrzeń nazw lub nazwa maszynowa. Pod warunkiem, że C+++ obsługuje nie-wirtualne dziedziczenie liczby mnogiej i że zmienna może mieć ten sam typ, pozbawia to szans na odwołanie się do niewłaściwego obiektu. Jest to niezbędne do metaprogramowania szablonów.Innym przykładem może być
&B::foo
vs&B.foo
w kontekście klasy B.Rozwińmy przykład @Deduplicator: