Rückgabewerte (C++)

Ein skalarer Rückgabewert, der in 64 Bits passt, wird durch RAX zurückgegeben, dazu gehören auch __m64-Typen.Nicht skalare Typen, darunter Gleitkommazahlen, Doubles und Vektortypen, wie z. B. __m128, __m128i und __m128d, werden in XMM0 zurückgegeben.Der Status von nicht verwendeten Bits in dem in RAX oder XMM0 zurückgegebenen Wert ist nicht definiert.

Benutzerdefinierte Typen können als Wert von globalen Funktionen und statische Memberfunktionen zurückgegeben werden.Um als Wert in RAX zurückgegeben zu werden, müssen benutzerdefinierte Typen eine Länge von 1, 2, 4, 8, 16, 32 oder 64 Bits haben; keinen benutzerdefinierten Konstruktor, Destruktor oder Kopierzuweisungsoperator; keine privaten oder geschützten nicht statischen Datenmember; keine nicht statischen Datenmember vom Typ Verweis; keine Basisklassen; keine virtuellen Funktionen; und keine Datenmember, die diese Anforderungen nicht ebenfalls erfüllen.(Dies ist im Grunde die Definition eines C++03 POD-Typs.Da die Definition im Standard C++11 geändert wurde, sollte std::is_pod nicht für diesen Test verwendet werden.) Andernfalls nimmt der Aufrufer die Verantwortung für die Speicherbelegung und für die Übergabe eines Zeigers für den Rückgabewert als erstes Argument an.Nachfolgende Argumente werden dann um ein Argument nach rechts verschoben.Derselbe Zeiger muss vom Aufgerufenen in RAX zurückgegeben werden.

Diese Beispiele zeigen, wie Parameter und Rückgabewerte für Funktionen mit den angegebenen Deklarationen übergeben werden:

Beispiel für Rückgabewert 1 – Ergebnis 64 Bit

  

Beispiel für Rückgabewert 2 – Ergebnis 128 Bit

  

Beispiel für Rückgabewert 3 – Ergebnis Benutzertyp als Zeiger

     

Beispiel für Rückgabewert 4 – Ergebnis Benutzertyp als Wert

     

Siehe auch

Referenz

Aufrufkonvention