2016-07-27 15 views
1

Ich weiß in C++, :: verwenden, um den Namespace für eine Variable oder Funktion wie myNamespace::a zu qualifizieren. Aber ich bemerke einige Verwendungen wie ::myFunction(). Bedeutet dies, dass die Funktion zum globalen Namespace gehört?Gehört :: myFunction() zum globalen Namespace?

+0

Dies stellt sicher, dass nur Auflösung statt des Namespace Sie sind im globalen Namespace tritt Siehe http:. // Stackoverflow. com/questions/4269034/was-ist-die-Bedeutung-von-vor-Doppelpunkt-Doppelpunkt – larrylampco

Antwort

3

Wenn der Code kompiliert wird, dann verweist ::myFunction() auf die globale Deklaration von myFunction.

Dies wird am häufigsten verwendet, wenn eine lokale Definition Ihre globale Definition Schatten:

namespace local { 
    int myFunction() {}; // local namespace definition 
}; 
int myFunction() {}; // global definition. 
using namespace local; 

int main() { 
    // myFunction(); // ambiguous two definitions of myFunction in current scope. 
    local::myFunction(); // uses local::myFunction(); 
    ::myFunction(); // uses global myfunction(); 
+0

@Leon, ja, behoben. –

3

Ja, es bedeutet die Variable, Typen oder Funktion folgende es im globalen Namensraum zur Verfügung stehen müssen.

Es kann beispielsweise verwendet werden, wenn etwas von einer lokalen Definition abgeschattet wird:

struct S { 
    int i; 
}; 

void f() { 
    struct S { 
    double d; 
    }; 

    S a; 
    ::S b; 

    static_assert(sizeof(a) != sizeof(b), "should be different types"); 
} 
+1

Werfen Sie einen Blick auf ['type_traits'] (http://en.cppreference.com/w/cpp/header/type_traits) und [' declltype'] (http://en.cppreference.com/w/cpp/ Sprache/Dekltyp), um Typen mit gleicher Größe zu umgehen. zB: 'static_assert (std :: ist_same :: value," sollte ein anderer Typ sein ");' – user4581301