52 votes

opérateur de résolution de portée sans portée

En C ++, à quoi sert l'opérateur de résolution de portée lorsqu'il est utilisé sans portée? Par exemple:

 ::foo();
 

68voto

Mark Points 6505

Cela signifie une portée mondiale. Vous devrez peut-être utiliser cet opérateur lorsque des fonctions ou des variables en conflit ont la même étendue et que vous devez utiliser une variable globale. Vous pourriez avoir quelque chose comme (cela ne compilera probablement pas!):

 void bar();    // this is a global function

class foo {
    void some_func() { ::bar(); }    // this function is calling the global bar() and not the class version
    void bar();                      // this is a class member
};
 

Si vous avez besoin d'appeler la fonction globale bar () depuis une fonction membre de la classe, vous devez utiliser :: bar () pour obtenir la version globale de la fonction.

7voto

Matt Price Points 9674

Notez également que cette résolution de nom se produit avant la résolution de surcharge. Donc, s'il y a quelque chose du même nom dans votre portée actuelle, il cessera de rechercher d'autres noms et tentera de les utiliser.

 void bar() {};
class foo {
    void bar(int) {};
    void foobar() { bar(); } // won't compile needs ::bar()
    void foobar(int i) { bar(i); } // ok
}
 

3voto

Drealmer Points 2284

Lorsque vous avez déjà une fonction nommée foo () dans votre étendue locale mais que vous devez accéder à celle de l'étendue globale.

2voto

itsmatt Points 18905

Mon c ++ est rouillé, mais je pense que si vous avez une fonction déclarée dans la portée locale, telle que foo () et une autre au niveau global, foo () fait référence à la fonction locale. :: foo () fera référence au global.

1voto

shoosh Points 34322

faisant référence à la portée mondiale

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X