Verständnisproblem bei Referenzen
-
Hallo!
Folgender Code:
int& test(int& var1){ static int var2 = ++var1; return var2; } int main(){ int varMain = 5; cout << test(varMain) << endl << endl; cout << test(varMain) << endl << endl; cout << varMain << endl << endl; return 0; }Ausgabe:
6
6
6Ich hätte aber 6 - 7 - 7 erwartet. Denn ich übergebe varMain ja per Referenz. Damit wird varMain beim ersten Aufruf von test() inkrementiert und beträgt damit 6. Beim zweiten Aufruf von test() wird sie nochmal inkrementiert und müsste nun 7 betragen. Dem ist aber nicht so. Wo also ist mein Denkfehler?
-
Die statische lokale Variable var2 wird beim ersten Aufruf (einmalig) initialisiert, folglich wird der Ausdruck in der Initialisierung auch nur einmal ausgewertet.
-
Doh!
Kann man ja beheben, indem man Deklaration und Initialisierung trennt:
int& test(int& var1){ static int var2; var2 = ++var1; return var2; }Wäre das aber semantisch richtig?
-
achWasWeißIchDenn? schrieb:
int& test(int& var1){ static int var2; var2 = ++var1; return var2; }Wäre das aber semantisch richtig?
Was ist denn der Sinn von var2? Ich sehe keinen.
-
Ich denke der Funktionsname verrät den Sinn.
-
Fellhuhn schrieb:
Ich denke der Funktionsname verrät den Sinn.
nicht in dem Maße, dass man bewerten könnte, ob "die Semantik richtig ist".