Co to jest „alias przestrzeni nazw” w C ++? Jak to jest używane?
c++
namespaces
Martin B.
źródło
źródło
Po prostu #define nie zadziała.
Kompiluje się dobrze. Umożliwia obejście kolizji nazw przestrzeni nazw / klas.
W ostatnim wierszu „Hmm: Ups” to błąd kompilacji. Preprocesor zmienia go na Nope :: Oops, ale Nope jest już nazwą klasy.
źródło
Więcej na ten temat http://channel9.msdn.com/Series/C9-Lectures-Stephan-T-Lavavej-Core-C-/Stephan-T-Lavavej-Core-C-1-of-n
Chodzi o wybranie aliasu dla dłuuugiej nazwy przestrzeni nazw, takiej jak:
namespace SHORT = NamespaceFirst::NameSpaceNested::Meow
Później możesz wpisaćef
typedef SHORT::mytype
zamiast
typedef NamespaceFirst::NameSpaceNested::Meow::mytype
Ta składnia działa tylko dla przestrzeni nazw, nie może zawierać klas, typów po
namespace NAME =
źródło
Należy również zauważyć, że aliasy przestrzeni nazw i dyrektywy using są rozwiązywane w czasie kompilacji, a nie w czasie wykonywania. (Mówiąc dokładniej, oba są narzędziami używanymi do informowania kompilatora, gdzie jeszcze ma szukać podczas rozwiązywania nazw, jeśli nie może znaleźć określonego symbolu w bieżącym zakresie lub w żadnym z jego zakresów nadrzędnych). Na przykład żadne z nich nie będzie skompilować:
Zaciekawiony umysł mógł zauważyć, że
constexpr
zmienne są również używane w czasie kompilacji i zastanawiać się, czy można ich używać w połączeniu z aliasem lub dyrektywą. O ile wiem, nie mogą, chociaż mogę się co do tego mylić. Jeśli musisz pracować ze zmiennymi o identycznych nazwach w różnych przestrzeniach nazw i wybierać między nimi dynamicznie, musisz użyć odwołań lub wskaźników.Użyteczność powyższego może być ograniczona, ale powinna służyć temu celowi.
(Przepraszam za wszelkie literówki, które mogłem pominąć w powyższym.)
źródło
Przestrzeń nazw służy do zapobiegania konfliktom nazw.
Na przykład:
Masz teraz pasek nazw dwóch klas, które są zupełnie inne i oddzielne dzięki przestrzeni nazw.
Pokazane "używanie przestrzeni nazw" polega na tym, że nie musisz określać przestrzeni nazw, aby używać klas w tej przestrzeni nazw. tj. std :: string staje się ciągiem.
mój zasób: https://www.quora.com/What-is-namespace-in-C++-1
źródło