2012-04-12 16 views
0

Ich bin verwirrt, warum dieser richtig ist. Der Rückgabewert ist der Referenztyp int&, , aber die Funktion h() gibt einen Wert int in Satz return x zurück. Also, wie ändert sich die int zurück zu einer int &?Kann den Rückgabetyp des Codeausschnitts nicht verstehen

Dies ist das Code-Snippet und kompiliert gut mit dem C++ - Compiler.

int& h() { 
int q; 
static int x; 
return x; 
} 

Antwort

4

Dies gibt einen Verweis auf eine statische int zurück. Die x wird beim ersten Aufruf der Funktion h initialisiert. Verwenden Sie es wie folgt aus:

int& href = h(); 
++href; // increments the static variable 
int& href2 = h(); // another reference to the same static variable 

Die Variable q sollte keine Auswirkungen haben, und ich hielte es für zweifelhaft.

+0

ein wenig verstehen – user1279988

1

Die Referenz bedeutet, dass Sie tatsächlich effektiv die gleiche Variable so zu ändern, den Wert der Rücksendung, was zurückgegeben wurde, wird direkt den Wert von x ändern Wenn der Code hat writtten worden:

int h() 
{ 
    int q; 
    static int x; 
    return x; 
} 

(dh nicht Referenz) dann würden Sie eine Kopie des Wertes x zurückgeben (obwohl Sie fair sein sollten, überprüfen Sie Return Value Optimization.) Die Rückgabe einer Referenz ist effizient, jedoch gibt es Zeiten (Multithreading ist ein offensichtliches Beispiel) wo es kann unerwünscht und verwirrend sein.

1

int& ist ein Verweis auf eine Int. x ist ein Int. Daher gibt return x; von einer Funktion, die int& zurückgibt, einen Verweis auf x zurück.

auch:

einen Verweis auf eine lokale Variable Rückkehr ist gefährlich, weil die lokalen Variablen, wenn die Funktion beendet wird zerstört werden. Zu der Zeit, wenn Sie die Referenz erhalten, existiert die Sache, auf die sie verweist, nicht. Dies wird als Dangling-Referenz bezeichnet und ist wie ein Zeiger, der auf nichts zeigt.

Statische Variablen sind keine lokalen Variablen und werden beim Beenden der Funktion nicht zerstört. Daher zeigt die Referenz immer noch auf ein gültiges Objekt, wenn Sie es erhalten.

Verwandte Themen