Beaucoup de raisonnable réponses déjà. Je vais puce avec une analogie qui peut aider certains lecteurs. ::
fonctionne un peu comme le système de fichiers séparateur de répertoire '/
', lors de la recherche de votre chemin pour un programme que vous voulez exécuter. Considérer:
/path/to/executable
C'est très explicite - seulement un exécutable au même emplacement dans l'arborescence du système de fichiers peut correspondre à cette spécification, quel que soit le CHEMIN d'accès en vigueur. De la même manière...
::std::cout
...est tout aussi explicite dans le C++ de l'espace de noms "arbre".
Contrastant avec ces chemins absolus, vous pouvez configurer bonne shells UNIX (par exemple, zsh) pour résoudre relative chemins d'accès en vertu de n'importe quel élément dans votre PATH
variable d'environnement, donc si PATH=/usr/bin:/usr/local/bin
, alors...
X11/xterm
...serait joyeusement /usr/bin/X11/xterm
si trouvé, sinon, /usr/local/bin/X11/xterm
. De même, dire que vous étiez dans un espace de noms appelé X
, et a eu un "using namespace Y
" en effet, alors...
std::cout
...pourrait être trouvée dans l'une des ::X::std::cout
, ::std::cout
, ::Y::std::cout
(et éventuellement d'autres endroits en raison de Koenig et la recherche des arguments). De la sorte, seuls ::std::cout
est vraiment explicite sur exactement l'objet que vous voulez dire, mais heureusement, personne dans leur bon esprit jamais créer leur propre class/struct ou de l'espace appelé "std
", ni quoi que ce soit appelé "cout
", donc, dans la pratique, en utilisant seulement std::cout
est fine. Avec votre propre variables, cependant, que vous avez moins de garantie que d'autres personnes n'utilisent pas les mêmes noms, donc à l'aide des chemins absolus peut parfois être utile pour vous isoler de tous les autres espaces de noms que vous utilisez ou de la partie mais n'ont pas vraiment de contrôle sur le contenu de. D'autre part, il a également des couples vous plus étroitement à l'existant "absolue" de l'emplacement du symbole, qui va à l'encontre de l'un des avantages des espaces de noms dans le fait d'avoir moins de couplage et implicites de correspondance.