In der kleinen Probe unter:Was passiert mit dem Rückgabewert, wenn ich ihn nirgendwo aufbewahre?
#include<iostream>
using namespace std;
int z(){
return 5 + 10; // returns 15
}
int main(){
z(); // what happens to this return?
cout << "Did not fail";
return 0;
}
Was ist mit den 15 passiert? Ich habe versucht, es im Debugger auszuführen, aber ich kann es nirgends finden. Ich nehme an, dass, weil es zu nichts zugewiesen wurde, es einfach verschwunden ist, aber ich fühle mich wie falsch.
Ich fragte meine TA heute und er sagte mir, es ist auf dem Aufruf-Stack gespeichert, aber wenn ich es im Debugger sah, sehe ich, dass es nicht ist.
Es verschwindet. Wie genau dies geschieht, hängt von den Aufrufkonventionen ab. Sagen wir, einige von ihnen übergeben den Rückgabewert in einem der Register (und dann können Sie es dort sehen), einige übergeben sie über Stapel (und der Aufrufer lässt nur diesen Wert fallen). Außerdem kann der Optimizer auch hier spielen: Er kann die Funktion inline und die nutzlose Berechnung ablegen. Vielleicht möchten Sie sich den Assembler-Code anschauen, um zu sehen, was genau passiert. – yeputons
@yeputons Danke! Also meine Annahme war richtig. Ich denke, ich habe jetzt noch mehr Nachforschungen anzustellen. – Callat