int als int& zurückgeben

maniacquaker

Grünschnabel
Hallo,
in meinem schlauen übungsbuch steht, dass folgendes NICHT geht:

int& max(int x,int y){return ((x>y)?x:y);}

(leider) geht es bei mir aber (gcc unter anjuta)


was soll denn da der fehler sein? die referenz auf x bzw. y als rückgabewert? theoretisch kann ich mir denken, dass es nicht geht, da die variablen ja vom stack genommen werden und dann auf einen (ungültigen) speicherbereich referenziert wird. kann es sein, dass der gcc da standards verletzt?

danke im voraus
 
Hallo,

ich denke mal wenn du bspw. schreibst
C++:
int& foo(int x){
    return x;
}

Bekommst du vom g++ eine exakte Warning die da heißt:
warning: reference to local variable 'x' returned

Bei deinem Beispiel ist das eine Laufzeitentscheidung welche Referenz zu welcher Variablen zurückgegben werden soll, sprich der Compiler kann keine exakte Fehlermeldung geben welche Referenz zu welcher lokalen Variable zurückgegeben wird, also gibt er gar keine Meldung aus. Wieso aber nicht einfach ne allgemeinere Warnung ausgegeben wird, kann ich dir leider auch nicht verraten...

Gruß,
RedWing
 
Hi!
Selbst wenn man den gnu-compiler mit den Flags:
-W -Wall -ansi -pedantic
aufruft bringt er an dieser Stelle nicht mal ne Wahnung.

Sehr seltsam, anscheinend kann er sowas nicht erkennen.

Benny
 
Zurück