2011-11-25 15 views

risposta

7

Ciò significa che le funzioni putenv() e tzset() saranno cercati dal compilatore nel namespace globale.

Esempio

#include <iostream> 

using namespace std; 

//global function 
void foo() 
{ 
    cout << "This function will be called by bar()"; 
} 

namespace lorem 
{ 
    void foo() 
    { 
     cout << "This function will not be called by bar()"; 
    } 

    void bar() 
    { 
     ::foo(); 
    } 
} 

int main() 
{ 
    lorem::bar(); //will print "This function will be called by bar()" 
    return 0; 
} 
2

Significa: cercare la funzione nel namespace globale.

1

Utilizzerà il nome specificatamente non qualificato (a differenza di qualsiasi cosa importato con la parola chiave using).

7

noto anche come Scope resolution operator

In C++ è usato per definire le funzioni membro già dichiarati (nel file di intestazione con la .hpp o l'estensione h) di una particolare classe. Nel file .cpp si possono definire le normali funzioni globali o le funzioni membro della classe. Per distinguere tra le normali funzioni e le funzioni membro della classe, è necessario utilizzare l'operatore di risoluzione scope (: :) tra il nome classe e il nome della funzione membro ovvero ship :: foo() dove nave è un class and foo() è una funzione membro della classe class.

Esempio da Wikipedia:

#include <iostream> 

// Without this using statement cout below would need to be std::cout 
using namespace std; 

int n = 12; // A global variable 

int main() { 
    int n = 13; // A local variable 
    cout << ::n << endl; // Print the global variable: 12 
    cout << n << endl; // Print the local variable: 13 
} 
3

C'è stata una discussione di ieri (+ un anno) su una questione analoga. Forse puoi trovare una risposta più approfondita qui.

What is the meaning of prepended double colon "::"?

+0

Avresti dovuto contrassegnarlo come duplicato. –

+1

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

+0

@stanek - +1 per aumentare il rep :) – DVK

0

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 .