il ::
è l'operatore di risoluzione dell'ambito, si dice al compilatore in quanto campo di applicazione a trovare la funzione.
Per esempio, se si dispone di una funzione con una variabile locale var
e si dispone di una variabile globale con lo stesso nome, è possibile scegliere di accedere quello globale anteponendo l'operatore di risoluzione dell'ambito:
int var = 0;
void test() {
int var = 5;
cout << "Local: " << var << endl;
cout << "Global: " << ::var << endl;
}
Il IBM C++ documentazione del compilatore si esprime così (source):
L'operatore :: (risoluzione ambito) viene utilizzato per qualificare i nomi nascosti in modo che si può ancora usarli.È possibile utilizzare l'operatore dell'ambito unario se l'ambito dello spazio dei nomi o il nome dell'ambito globale è nascosto da una dichiarazione esplicita con lo stesso nome in un blocco o classe.
Lo stesso può essere fatto per metodi all'interno di una classe e versioni con lo stesso nome all'esterno. Se si desidera accedere a una variabile, funzione o classe in uno spazio dei nomi specifico, è possibile accedervi in questo modo: <namespace>::<variable|function|class>
Una cosa da notare però, anche se è un operatore, non è uno degli operatori che può essere sovraccaricato .
fonte
2011-11-25 21:49:18
Avresti dovuto contrassegnarlo come duplicato. –
Non sono sicuro di come contrassegnare un post o come aggiungere una risposta sotto la domanda come hai fatto tu. Potrebbe avere qualcosa a che fare con il fatto di non avere abbastanza rappresentanti da modificare. – stanek
@stanek - +1 per aumentare il rep :) – DVK