C++ : qu'est-ce que :: pour?
Si vous allez à la accepté de répondre à cette post
Quelqu'un pourrait-il donner des précisions sur le pourquoi il utilise:
double temp = ::atof(num.c_str());
et pas simplement
double temp = atof(num.c_str());
Aussi, est-il considéré comme une bonne pratique d'utiliser cette syntaxe lorsque vous utilisez "pure" fonctions globales?
- Aussi, comment voulez-vous créer une stackoverflow lien de telle manière que lorsque quelqu'un clique dessus, il va directement à la réponse (et non au début de la page)?
- Concernant les direct-to-réponse liens, regardez dans le coin inférieur gauche, au bas de la réponse pour le "lien" lien.
- Comme ceci: stackoverflow.com/questions/1012571/...
- Il y a un peu de texte qui dit que
link
après la réponse. - Il y a un lien en dessous de chaque réponse en disant: "lien"; cela vous donnera un permalien.
- merci!!!! Je n'ai jamais vu que "link" avant!! lol
- Hmm... que dire de
std::atof()
.::atof()
signifie que vous avez inclus<stdlib.h>
et souhaitez la version internationale,std::atof()
signifie que vous avez inclus<cstdlib>
(comme un bon programmeur C++) et que vous souhaitez la version dans lestd
espace de noms.
Vous devez vous connecter pour publier un commentaire.
Il dit d'utiliser la version internationale, pas celui déclaré dans une portée locale. Donc, si quelqu'un l'a déclaré un
atof
dans votre classe, ce sera assurez-vous d'utiliser l'échelle mondiale.Ont un coup d'oeil à Wikipédia sur ce sujet:
::
est l'opérateur de résolution de portée. Son utilisation dans ce scénario, comme un opérateur unaire, est de s'assurer que le nomatof
) est toujours recherché dans la portée globale -- cela peut être utile pour prévenir les nom de masquage d'interférer avec la recherche.std::atof()
pour C++ 😉L'opérateur :: est l'opérateur de résolution de portée.
lorsqu'il est utilisé avec spécificateur de classe comme Un::un, c'est d'accéder aux données d'un membre de la classe A.
lorsque utilisé sans aucun prescripteur, qu'il accède à la variable globale.
Il est principalement utilisé dans la suite de concours.
base ] classes.
Permet de dire que vous avez deux versions d'une fonction
f()
celle qui est définie à l'extérieur d'un espace de noms et un définies à l'intérieur. Maintenant, disons que vous avez une autre fonctiong()
dans le même espace de noms. Maintenant, si vous nef()
à l'intérieur deg()
il va appeler celle qui est définie dans le même espace de noms. Mais si vous voulez appeler la version internationale que vous devez faire::f()
::func()
signifie que cette fonction n'est pas affilié à une classe spécifique. Il est utilisé lorsqu'il n'existe de nombreuses fonctions avec le même nom, et pour éviter la confusion entre celui que vous voulez et spécifique des fonctions de membre vous faites précéder le nom de la fonction avec la portée de l'opérateur.À partir de C++ Primer, 4e édition, section 17.2.1:
"Noms définis au niveau global - noms déclarée en dehors de toute classe, de la fonction ou de l'espace de noms sont définis à l'intérieur de l'espace de noms global. L'espace de noms global est implicitement déclarée et existe dans chaque programme. Chaque fichier qui définit les entités à portée globale ajoute les noms de l'espace de noms global.
La portée de l'opérateur peut être utilisé pour désigner les membres de l'espace de noms global. Parce que l'espace de noms global est implicite, elle n'a pas un nom; la notation
se réfère à un membre de l'espace de noms global."