Proszę bardzo:
#include <iostream>
int main()
{
std::endl(std::operator<<(std::cout, "Hello world!"));
}
Pisząc to w ten sposób, unikamy podatnych na błędy ADL wraz z używaniem dyrektyw i deklaracji.
To ma być sarkastyczna odpowiedź. :-RE
W tej sprawie jestem z Herbem Sutterem nad Google. Z standardów kodowania C ++:
Możesz i powinieneś używać przestrzeni nazw, używając deklaracji i dyrektyw w plikach implementacyjnych po #include dyrektywach i dobrze się z tym czujesz. Pomimo powtarzających się twierdzeń przeciwnych, przestrzeń nazw z deklaracjami i dyrektywami nie jest zła i nie pokonuje celu przestrzeni nazw. Są raczej tym, co sprawia, że przestrzenie nazw są użyteczne .
Możesz mieć obsesję na punkcie potencjalnych konfliktów przestrzeni nazw, które prawdopodobnie nigdy się nie pojawią i prawdopodobnie nie będą trudne do naprawienia w tak rzadkim astronomicznie wydarzeniu, ostrożnie unikając using
dyrektyw i wyraźnie określając każdą rzecz, której używasz (w zależności od operatora) wraz z using
deklaracjami lub po prostu idź i zacznij using namespace std
. Polecam to drugie z punktu widzenia produktywności.
Większość podręczników c ++ uczy początkujących posługiwania się przestrzenią nazw std; czy propagują słabą praktykę kodowania?
Przeciwnie, jeśli mnie zapytasz, i uważam, że Sutter powyżej się zgadza.
Teraz w trakcie mojej kariery napotkałem łącznie około 3 konfliktów przestrzeni nazw, będących bezpośrednim wynikiem using
dyrektyw w bazach kodów obejmujących dziesiątki milionów LOC. Jednak we wszystkich 3 przypadkach znajdowały się one w plikach źródłowych, które obejmowały ponad 50 000 wierszy starszego kodu, pierwotnie napisane w C, a następnie zamaskowane na C ++, wykonując ogromną eklektyczną listę różnych funkcji, w tym nagłówki z kilkunastu różnych bibliotek i posiadające epicka lista#includes
obejmująca całą stronę. Pomimo epickiego bałaganu nie były zbyt trudne do naprawienia, ponieważ powodowały błędy kompilacji w OSX (tym, w którym nie udało się zbudować kodu), a nie błędy w czasie wykonywania. Nie organizuj swojego kodu w ten koszmarny sposób i wszystko powinno być w porządku.
To powiedziawszy, unikaj zarówno using
dyrektyw, jak i deklaracji w plikach nagłówkowych. To po prostu opóźnione. Ale w przypadku plików źródłowych, a zwłaszcza tych, które nie mają całej strony wypełnionej #include
dyrektywami, powiedziałbym, że nie przejmuj się, jeśli nie pracujesz dla Google.