Γιατί η "χρήση του χώρου ονομάτων std;" θεωρείται κακή πρακτική;

Μου έχουν πει άλλοι ότι το να γράφω χρησιμοποιώντας το namespace std; στον κώδικα είναι λάθος και ότι θα πρέπει να χρησιμοποιώ απευθείας τα std::cout και std::cin.

Γιατί η χρήση του namespace std; θεωρείται κακή πρακτική; Είναι αναποτελεσματική ή υπάρχει κίνδυνος να δηλωθούν διφορούμενες μεταβλητές (μεταβλητές που έχουν το ίδιο όνομα με μια συνάρτηση στο χώρο ονομάτων std); Επηρεάζει την απόδοση;

Λύση

Αυτό δεν σχετίζεται καθόλου με την απόδοση. Αλλά σκεφτείτε το εξής: χρησιμοποιείτε δύο βιβλιοθήκες που ονομάζονται Foo και Bar:

using namespace foo;
using namespace bar;

Όλα λειτουργούν μια χαρά, και μπορείτε να καλέσετε την Blah() από την Foo και την Quux() από την Bar χωρίς προβλήματα. Αλλά μια μέρα αναβαθμίζετε σε μια νέα έκδοση της Foo 2.0, η οποία τώρα προσφέρει μια συνάρτηση που ονομάζεται Quux(). Τώρα έχετε μια σύγκρουση: Τόσο η Foo 2.0 όσο και η Bar εισάγουν την Quux() στο παγκόσμιο χώρο ονομάτων σας. Αυτό θα χρειαστεί κάποια προσπάθεια για να διορθωθεί, ειδικά αν οι παράμετροι της συνάρτησης τυχαίνει να ταιριάζουν.

Αν είχατε χρησιμοποιήσει foo::Blah() και bar::Quux(), τότε η εισαγωγή της foo::Quux() θα ήταν ένα μη-γεγονός.

Σχόλια (39)

Ένας άλλος λόγος είναι η έκπληξη.

Αν δω `cout

Σχόλια (5)

Όλα έχουν να κάνουν με τη διαχείριση της πολυπλοκότητας. Η χρήση του χώρου ονομάτων θα τραβήξει πράγματα που δεν θέλετε, και έτσι πιθανόν να δυσχεράνει την αποσφαλμάτωση (λέω πιθανόν). Η χρήση του std:: παντού είναι πιο δύσκολη στην ανάγνωση (περισσότερο κείμενο και όλα αυτά).

Άλογα για τα μαθήματα - διαχειριστείτε την πολυπλοκότητά σας όπως μπορείτε και αισθάνεστε καλύτερα.

Σχόλια (0)