Waarom wordt "using namespace std;" beschouwd als een slechte gewoonte?

Mij is door anderen verteld dat het verkeerd is om namenpace std; in code te gebruiken, en dat ik in plaats daarvan std::cout en std::cin direct moet gebruiken.

Waarom wordt het gebruiken van de namespace std; als een slechte praktijk beschouwd? Is het inefficiënt of riskeert het declareren van dubbelzinnige variabelen (variabelen die dezelfde naam hebben als een functie in std namespace)? Heeft het invloed op de prestaties?

Oplossing

Dit heeft helemaal niets te maken met prestatie. Maar bedenk dit: je gebruikt twee bibliotheken genaamd Foo en Bar:

using namespace foo;
using namespace bar;

Alles werkt goed, en je kunt Blah() van Foo en Quux() van Bar zonder problemen aanroepen. Maar op een dag upgrade je naar een nieuwe versie van Foo 2.0, die nu een functie genaamd Quux() aanbiedt. Nu heb je een conflict: Zowel Foo 2.0 als Bar importeren Quux() in je globale namespace. Dit gaat wat moeite kosten om op te lossen, vooral als de functie parameters toevallig overeenkomen.

Als je foo::Blah() en bar::Quux() had gebruikt, dan zou de introductie van foo::Quux() een non-event zijn geweest.

Commentaren (39)

Een andere reden is verrassing.

Als ik `cout

Commentaren (5)

Het gaat allemaal om het beheren van complexiteit. Het gebruik van de namespace zal dingen naar binnen trekken die je niet wilt, en het dus mogelijk moeilijker maken om te debuggen (ik zeg mogelijk). Overal std:: gebruiken is moeilijker te lezen (meer tekst en zo).

Paarden voor cursussen - beheer je complexiteit hoe je dat het beste kunt en je daartoe in staat voelt.

Commentaren (0)