Qu'est-ce qu'un «alias d'espace de noms» en C ++? Comment est-ce utilisé?
c++
namespaces
Martin B
la source
la source
Tout simplement, la #define ne fonctionnera pas.
Compile bien. Vous permet de contourner les collisions d'espace de nom / nom de classe.
Sur la dernière ligne, "Hmm: Oups" est une erreur de compilation. Le pré-processeur le change en Nope :: Oops, mais Nope est déjà un nom de classe.
la source
En savoir plus sur ce sujet http://channel9.msdn.com/Series/C9-Lectures-Stephan-T-Lavavej-Core-C-/Stephan-T-Lavavej-Core-C-1-of-n
Il s'agit de choisir un alias pour un nom d'espace de noms long, tel que:
namespace SHORT = NamespaceFirst::NameSpaceNested::Meow
Puis plus tard, vous pouvez taperef
typedef SHORT::mytype
au lieu de
typedef NamespaceFirst::NameSpaceNested::Meow::mytype
Cette syntaxe ne fonctionne que pour les espaces de noms, ne peut pas inclure de classes, de types après le
namespace NAME =
la source
Notez également que les alias d'espace de noms et les directives d'utilisation sont résolus au moment de la compilation et non au moment de l'exécution. (Plus précisément, ce sont tous les deux des outils utilisés pour indiquer au compilateur où chercher ailleurs lors de la résolution de noms, s'il ne trouve pas un symbole particulier dans la portée actuelle ou l'une de ses portées parentes.) Par exemple, aucune de ces compiler:
Maintenant, un esprit curieux peut avoir remarqué que des
constexpr
variables sont également utilisées au moment de la compilation, et se demander si elles peuvent être utilisées en conjonction avec un alias ou une directive. À ma connaissance, ils ne le peuvent pas, bien que je puisse me tromper à ce sujet. Si vous avez besoin de travailler avec des variables portant le même nom dans différents espaces de noms et de choisir entre elles de manière dynamique, vous devrez utiliser des références ou des pointeurs.L'utilité de ce qui précède peut être limitée, mais elle devrait servir l'objectif.
(Mes excuses pour les fautes de frappe que j'ai pu manquer dans ce qui précède.)
la source
L'espace de noms est utilisé pour éviter les conflits de noms.
Par exemple:
Vous avez maintenant deux barres de nom de classes, qui sont complètement différentes et séparées grâce à l'espacement des noms.
Le "using namespace" que vous montrez est de sorte que vous n'ayez pas à spécifier l'espace de noms pour utiliser des classes dans cet espace de noms. ie std :: string devient une chaîne.
ma ressource: https://www.quora.com/What-is-namespace-in-C++-1
la source