• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Using namespace std VS. std::

VPS Starter Arubacloud
+1 głos
3,161 wizyt
pytanie zadane 3 lipca 2017 w C i C++ przez Michał Biernacki Użytkownik (670 p.)
Witam, otóż ostatnio zastanawiałem się dlaczego w wielu waszych kodach, zamiast "using namespace std;" używacie za każdym razem "std::" np. std::string, std::cout, std::cin.

Czym się to różni i jakie są wady oraz zalety obu możliwości? (bo chyba jakieś są :D)

Starałem się znaleźć w internecie, ale nie bardzo wiedziałem jak ująć to pytanie w słowach :/ A jak już coś znalazłem to wszystko było po angielsku, a u mnie trochę słabo, jeśli chodzi o słownictwo techniczne itd.

Z góry dziękuję za odpowiedź :)

1 odpowiedź

+3 głosów
odpowiedź 3 lipca 2017 przez Evelek Nałogowiec (28,960 p.)
wybrane 3 lipca 2017 przez Michał Biernacki
 
Najlepsza
W programach składających się z jednego pliku można śmiało używać using namespace std;. W programach obiektowych składających się z wielu plików warto używać std::, aby nie włączać wielokrotnie do plików tej samej przestrzeni nazw.
komentarz 3 lipca 2017 przez Michał Biernacki Użytkownik (670 p.)
Dlaczego warto? Gdybym cały czas używał using namespace, to miałoby to jakieś poważniejsze konsekwencje? Jeśli tak to jakie?
2
komentarz 3 lipca 2017 przez Evelek Nałogowiec (28,960 p.)
Podam przykład w C++.

Załóżmy, że korzystasz z biblioteki standardowej. Zapisujesz #include <vector>. Ale w tym samym pliku korzystasz z jakieś zewnętrznej biblioteki i zapisujesz załóżmy #include <outsource_vector>. Następnie zapisujesz using namespace std;. Potem chcesz utworzyć vector. Zapisujesz więc np. vector<int> vec;. I tu się pojawia problem wieloznaczności - okazuje się, że plik nagłówkowy outsource_vector również zawiera klasę vector i kompilator nie wie, do czego odnosi się vector<int> vec. Gdybyś zamiast using namespace std; zapisał np. std::vector<int> vec; to by problemu nie było.
komentarz 3 lipca 2017 przez Michał Biernacki Użytkownik (670 p.)
Dziękuję za wyczerpującą odpowiedź i poświęcony czas :)
2
komentarz 3 lipca 2017 przez draghan VIP (106,230 p.)
Dodam, że jeśli wiesz co robisz: czyli używasz dyrektywy using lokalnie (w obrębie funkcji czy pliku cpp), to jest jeszcze okej. Wtedy to jest tylko Twój "problem", Twoja sprawa. Gorzej, jeśli wrzucisz dyrektywę do nagłówka, Wtedy każdy, kto dołączy Twój nagłówek, będzie miał odkryte te nazwy, które obejmuje dyrektywa - i to może być mocno niepożądane.

Podobne pytania

+2 głosów
1 odpowiedź 814 wizyt
pytanie zadane 11 kwietnia 2021 w C i C++ przez Dawidziu Bywalec (2,630 p.)
0 głosów
1 odpowiedź 442 wizyt
pytanie zadane 6 grudnia 2019 w C i C++ przez Gildin1_2 Gaduła (3,060 p.)
0 głosów
1 odpowiedź 995 wizyt
pytanie zadane 19 kwietnia 2018 w C i C++ przez Sic Dyskutant (8,510 p.)

92,782 zapytań

141,712 odpowiedzi

320,600 komentarzy

62,114 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...