2017-06-01 4 views
0
#include <iostream> 

using namespace std; 

int& fun1(int& ref) 
{ 
    ref = 30; 
    return ref; 
} 

int main() 
{ 
    int i = 10; 

    i = fun1(i); 
    cout << "Value of i:" << i << endl; 

    return 0; 
} 

Ausgang zurück: Wert von i: 30Ist es gültig einen Verweis als Referenz gilt in C++

Ist es gültig ein Funktionsargument als Referenz übergeben zurückzukehren, wie eine Funktion die gleiche Referenz zurückgeben? Nach meinem Verständnis wird ref in fun1 (int & ref) einen eigenen Speicherplatz im Stack haben und die Adresse von ref ist ungültig.

+1

Dieser Code ist absolut gültig. –

+2

Ja, das ist gültig. Es gibt keinen Verweis auf eine Referenz in C++, wenn dies Ihre Verwirrung verursacht hat. –

+0

Wenn Sie einen Parameter als Referenz übergeben, hat die Rückgabe des gleichen Verweises keine Bedeutung und daher auch keine Auswirkungen. Der Wert der Referenzparameter wird aktualisiert, wenn er in der Funktion aktualisiert wird, in Ihrem Fall "fun1". – Kangkan

Antwort

0

Ja, es ist in Ordnung. Entscheidend ist, dass die Lebensdauer des Referenten lang genug ist.

2

Referenzen wirken in jeder Hinsicht, als wären sie das ursprüngliche Objekt. Das bedeutet, dass die Adresse einer Referenz die Adresse des Originalobjekts angibt und eine Referenz auf eine Referenz einen Verweis auf das Originalobjekt liefert.

Während es Zeiger auf Zeiger gibt, gibt es keine Referenz auf eine Referenz.

Beachten Sie, dass die Zuweisung in i = fun1(i); redundant ist. i ist in diesem Fall bereits 30. Sie können einfach fun1(i); anrufen.

Verwandte Themen