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?
Antwort
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();
@Leon, ja, behoben. –
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");
}
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
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