Da es sich um Windows handelt, nehmen wir einen x86-Prozessor an.
In diesem Fall befindet sich der Rückgabewert normalerweise im Register EAX. Da Sie ihn nicht verwenden, wird dieser Wert einfach ignoriert und beim nächsten Mal überschrieben, wenn etwas Code, der etwas in EAX schreibt, ausgeführt wird.
In vielen Fällen hat der Compiler, wenn eine Funktion keine anderen Nebenwirkungen hat (er nimmt nur Eingaben und gibt ein Ergebnis zurück), herauszufinden, wann Sie das Ergebnis nicht verwenden, und ruft die Funktion einfach nicht auf .
In Ihrem Fall hat die Funktion einige Nebenwirkungen, so dass sie diese Nebenwirkungen ausführen muss, aber kann Elide-Code gut sein, um die Summe zu berechnen. Selbst wenn es nicht entfernt wurde, kann es wahrscheinlich herausfinden, dass das, was hinzugefügt wird, wirklich zwei Konstanten sind, so dass es in der Regel keine tatsächliche Berechnung des Ergebnisses zur Laufzeit macht, sondern einfach etwas wie mov EAX, 2000
zu tun Erzeuge den Rückgabewert.
Der Rückgabewert wird einfach verworfen. Abhängig vom genauen Szenario kann der Optimierer den gesamten Funktionsaufruf optimieren, wenn keine beobachtbaren Nebenwirkungen auftreten (was in Ihrem Beispiel nicht der Fall ist).
Nach Rückkehr von TestIntReturn
wird die Funktion den Rückgabewert auf dem Stapel ausgeben, der Aufrufer wird dann den Stapelrahmen entsprechend anpassen, aber den zurückgegebenen Wert nicht vom Stapel in eine Variable kopieren.
Jeder hat richtig geantwortet - der Rückgabewert wird in diesem Fall einfach verworfen und in diesem speziellen Beispiel können Sie ihn ignorieren.
Allerdings , wenn der Rückgabewert ein Zeiger auf Speicher ist, der in der Funktion zugewiesen ist, und Sie ihn ignorieren, haben Sie eine Speicherleck.
So einige Funktion Werte können Sie nicht einfach ignorieren, aber in diesem Fall - Sie können.
Bei primitiven Typen passiert nichts. Es ist einfach ignoriert. Bei Klassenarten das zurückgegebene Objekt wird zerstört werden, ohne dass etwas anderes passiert.