6
votes

Les espaces de noms C ++ - «Utilisation» ou explicitement indiqués?

DUPLICATES possibles: strong>

Pourquoi "Utilisation de l'espace de noms std;" considéré comme un mauvaise pratique en C ++?
Utilisation de l'espace de noms STD P>

est-ce juste une question de préférence? Ou existe-t-il une raison valable de préférer p> xxx pré>

ou p>

#include <string>
myString std::string;


2 commentaires

Dupe de Stackoverflow.com/questions/1452721/... Parmi beaucoup, beaucoup d'autres.


Vous avez raison! Pourquoi n'ai-je pas trouvé ceux quand j'ai cherché? Pardon


3 Réponses :


4
votes

Ceci est une version modifiée d'une autre réponse que j'ai écrite sur le même sujet. Jusqu'à la version 3 maintenant.

Le problème majeur est des conflits de noms, en ce que si vous avez une variable appelée comptez dans votre code et que vous êtes à l'aide de namepace std; sera ambigu de ce que vous voulez dire. Ce n'est pas seulement compte . Reverse et égal sera également inclus, qui sont tous des identificateurs courants. Par exemple, cela entraînera une erreur de compilation: xxx

ignorant tous les problèmes au compilateur, c'est également un problème pour que quiconque vienne lire votre code. Ces 5 caractères supplémentaires garantissent que la prochaine personne qui maintient votre code connaît exactement ce que vous voulez dire sans avoir à vérifier le haut du fichier toutes les autres lignes pour voir si vous voulez dire std :: chaîne ou MyLib :: chaîne lorsque vous écrivez chaîne



Il convient également de noter que vous ne devez jamais mettre un à l'aide de Namspace xyz dans un fichier d'en-tête, car il peut se propager à tous les fichiers qui incluent ce fichier d'en-tête, même s'ils ne veulent pas utiliser cet espace de noms. . Un autre problème ici est qu'il n'est pas clair que l'espace de noms STD a été importé, de sorte que le responsable (ou dans 3 mois) ajoute une variable avec le même nom que la fonction STD obscure incluse dans la même unité de compilation et puis consacre une heure à essayer de trouver la cause de l'erreur de compilation.

(de l'efficacité C ++) dans la majorité des cas, il est très bénéfique d'utiliser xxx

comme s'il existe une version spécialisée de Swap, le compilateur Utilisera cela, sinon il tombera sur std :: échange . Si vous appelez std :: échange , vous utilisez toujours la version de base, qui n'appelera pas la version spécialisée (même si elle existe).

prise par exemple du code à l'aide de la < Un href = "http://fr.wikipedia.org/wiki/pimpl" rel = "Nofollow NOREFERRER"> PIMPL Idiom . Lorsque la copie par défaut peut copier toutes les données de la mise en œuvre réelle, où tout ce qui doit être effectué consiste à échanger les pointeurs. L'utilisation d'un swap spécialisé pourrait économiser d'énormes quantités d'heure d'exécution et les bibliothèques bien conçues doivent la spécialiser.


En résumé,

  • préférez toujours à l'aide de std :: échange sur std :: swap ()

  • Évitez à l'aide d'un espace de noms std dans une en-tête à tout prix en raison de la propagation, essayez d'éviter d'utiliser dans les fichiers de mise en œuvre.

  • Avoir des milliers de à l'aide de STD :: FOO En haut de chaque fichier n'est pas le moyen d'aller. Au plus, utilisez-la pour utiliser les classes communément utilisées.

    Tout le reste est d'opinion.


1 commentaires

Lol ... (presque) chaque dupe de cette question a une réponse de votre part ...: D



2
votes

Les usings sont corrects dans les fichiers du CPP. Vous préféreriez la deuxième syntaxe dans les en-têtes afin de ne pas les obtenir propagées dans votre projet.


0 commentaires

3
votes

Personnellement, je préfère le en utilisant code> déclaration plutôt que le à l'aide de la directive code>.

Par exemple: p>

#include<string>
using std::string;

string x="abc";


0 commentaires