Gdzie wypisywać przestrzeń nazw (lkod using namespace np. std;)

0

Witam.
Uczę się programowania od bardzo niedawna.
W książce Stephena Praty natknąłem się na stwierdzenie, że przestrzeń nazw najlepiej zapisywać tylko tam, gdzie będzie użyta, a nie poza funkcjami (tak jak na górze przed funkcją main), ale widzę, że właściwie we wszystkich napotkanych do tej pory kodach jest wpisywana poza funkcjami, zaraz po dyrektywie preprocesora.
Moje pytanie brzmi: Gdzie należy umieszczać przestrzeń nazw, żeby było to w dobrym guście i kiedyś nie dostać za to ochrzanu?

3

Prata ma tutaj rację. W przykładach pewnie widzisz kod nakierowany na zobrazowanie problemu/rozwiązania, a nie podążanie za wszystkimi dobrymi praktykami.

1

Zazwyczaj robię plik "usable_namespaces.hpp"
W którym piszę to using namespace std
I dołączam go do każdego pliku w projekcie.
Teraz wyobraźmy sobie że nagłe zdecydowano użyć zamiast std::vector lepszy/szybszy/sprytniejszy/... megasuper::vector
Więc:

  • w przypadku rady od Prata zmiany są w każdym miejscu użycia vector'a (wiele razy na plik)
  • w przypadku tego co widzisz w przykładach tylko w plikach gdzie użyto std::vector (raz na plik)
  • w przypadku użycia mojego rozwiązania - tylko jedno miejsce.
0

Nie powinno używać się przestrzeni nazw ( z małymi wyjątkami ) w plikach nagłówkowych w miejscu o globalnym zasięgu.
https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#Rs-using-directive

1 użytkowników online, w tym zalogowanych: 0, gości: 1