Varför anses "använda namespace std;" vara dålig praxis?

Andra har sagt till mig att det är fel att skriva using namespace std; i kod och att jag borde använda std::cout och std::cin direkt i stället.

Varför anses using namespace std; vara en dålig metod? Är det ineffektivt eller riskerar man att deklarera tvetydiga variabler (variabler som har samma namn som en funktion i namnområdet std)? Påverkar det prestandan?

Lösning

Detta har inte alls med prestationer att göra. Men tänk på följande: Du använder två bibliotek som heter Foo och Bar:

using namespace foo;
using namespace bar;

Allt fungerar bra och du kan anropa Blah() från Foo och Quux() från Bar utan problem. Men en dag uppgraderar du till en ny version av Foo 2.0, som nu erbjuder en funktion som heter Quux(). Nu har du en konflikt: Både Foo 2.0 och Bar importerar Quux() till ditt globala namnområde. Det här kommer att kräva en del arbete att åtgärda, särskilt om funktionsparametrarna råkar stämma överens.

Om du hade använt foo::Blah() och bar::Quux() skulle införandet av foo::Quux() ha varit en icke-händelse.

Kommentarer (39)

Ett annat skäl är överraskningen.

Om jag ser `cout

Kommentarer (5)

Allt handlar om att hantera komplexiteten. Om du använder namnområdet kommer du att få in saker som du inte vill ha, och därmed kan det eventuellt bli svårare att felsöka (jag säger eventuellt). Att använda std:: överallt är svårare att läsa (mer text och allt det där).

Hästar för kurser - hantera din komplexitet på det sätt du bäst kan och känner dig kapabel till.

Kommentarer (0)