Globaler Bereich ::

Der Global-Bereichs-Operator ist erst in C++ verfügbar und liefert dem Compiler den Hinweis, dass er ein Symbol im globalen Bereich suchen soll. Der Symbolname wird rechts der beiden Doppelpunkte :: angegeben.




Hello World!
#include <cstdio>

int main(){
  ::printf("Hello World!");
  return 0;
}

Siehe auch Bereichs-Operator ::

Details

Der Global-Bereichs-Operator erwartet ein Symbol als Operanden und hat keine Abarbeitungsrichtung, steht jedoch stets links des Operanden. Der Rückgabewert ist das gesuchte Symbol.

Der Global-Bereichs-Operator dient dazu, Symbole anzusprechen, welche im globalen Bereich deklariert wurden. Wenn ein Symbol in einem Namensraum deklariert wurde, kann es mit dem Bereichs-Operator angesprochen werden.

Symbole des globalen Bereiches sind grundsätzlich stets sichtbar, weswegen dieser Operator auf den ersten Blick unnütz erscheint. Der Sinn dieses Operators ist jedoch das explizite Ansprechen des globalen Bereiches, wenn ein gleichnamiges Symbol im aktuellen Bereich bereits existiert. Folgendes Beispiel ist ein Auszug einer Klasse für komplexe Zahlen. Die Berechnung der Exponentialfunktion ist als Funktion mit dem namen exp definiert, genau gleich wie die globale Exponentialfunktion. Damit diese Funktion die globale Funktion aufrufen kann, muss der Global-Bereichs-Operator verwendet werden, ansonsten würde die Funktion sich selbst aufrufen.

















3.992324, 6.217677
#include <cstdio>
#include <cmath>

class Complex{
  float im, re;
public:
  Complex(float imag, float real) : im(imag), re(real){}
  void print(){printf("%f, %f\n", im, re);}
  Complex exp() const {
    float expon = ::exp(re);
    return Complex(expon * ::cos(im), expon * ::sin(im));
  }
};

int main(){
  Complex c(1, 2);
  c.exp().print();
  return 0;
}

Der Global-Bereichs-Operator ist im eigentlichen Sinne kein Operator, da er nur einen Hinweis für den Compiler gibt und somit keinen Code produziert (sowohl der Operand als auch der Rückgabewert sind Symbole). Dies ist auch der Grund, wieso dieser Operator keine Abarbeitungsrichtung besitzt: Es gibt nichts abzuarbeiten. Dennoch sei hier nochmals bemerkt, dass der Operator stets links des Operanden stehen muss.

Überladen des Operators

Der Global-Bereichs-Operator kann NICHT überladen werden.