[gelöst] Operator ++(int) und Warnungen
-
Hallo,
ich baue mir gerade für meine kleine OpenGL-Klasse ein paar Hilfstypen. Natürlich müssen diese Hilfstypen auch einiges an Operatoren mitbringen.Ich hab eine Klasse die einen Verschiebungsvektor bezeichnet (2 Winkel, eine Länge). Ein Auszug aus dem Header:
namespace S3DTypes { class Length { protected: float InLength; public: // ++val S3DTypes::Length& operator ++(); // val++ S3DTypes::Length& operator ++(int); }; };Meine beiden Operatoren schauen folglich so aus:
// ++val S3DTypes::Length& S3DTypes::Length::operator ++() { ++InLength; return *this; } // val++ S3DTypes::Length& S3DTypes::Length::operator ++(int) { S3DTypes::Length tmp(*this); InLength++; return tmp; }Laut meinem Buch und vielel Tutorials im World Wide Web ist das auch richtig und OK so.
Was mich nun stutzig macht und wo ich mal ne Erklärung suche:
Wenn ich das mit Visual Studio übersetzten lasse, dann bekomme ich beim Operator ++(int) eine Warnung:warning C4172: Adresse einer lokalen Variablen oder eines temporären Werts wird zurückgegebenUnd eigentlich leutet mir diese Meldung ein. Mein Objekt tmp verfällt ja am Ende meiner Funktion. Wieso klappt aber der Rückgabewert trotzdem?
Die Funktion ist doch beendet?!? Und wenn das klappt, wie bekomme ich die Warnung weg?Ich bin immer einer, der sagt: Jede Warnung hat seinen Sinn. Und einfach zu sagen: "Wird schon passen" will ich auch nicht. Ich wills zumindest verstehen. In diesem Bereich lässt aber mein Buch und auch die vielen Tutorials leider stark nach. Bitte um Erklärung oder Lektüre.
Danke,
Stefan
-
Der Postfix-Increment-Operator darf keine Referenz zurückgeben.
-
Danke schön.
Dann hat das Buch "C++ von A bis Z" von Jürgen Wolf auf Seite 368/369, Kapitel 4.5.4 einen Fehler.
-
Ist ja auch kein gutes Buch.
-
stefanjann schrieb:
Danke schön.
Dann hat das Buch "C++ von A bis Z" von Jürgen Wolf auf Seite 368/369, Kapitel 4.5.4 einen Fehler.
Überlege auch mal, was mit
tmppassiert (der Name der Variable impliziert ja schon, dass sie nur temporär existiert). Am Ende der Funktion wirdtmpzerstört. Was referenziert die Referenz dann also?PS: Janjan hat recht, das Buch ist eher mäßig.
-
stefanjann schrieb:
das Buch "C++ von A bis Z"
... fällt hier immer wieder negativ auf. Ich fürchte du hast dir da einen Stapel Papier für die Tonne zugelegt.
-
Tachyon schrieb:
Überlege auch mal, was mit tmp passiert (der Name der Variable impliziert ja schon, dass sie nur temporär existiert). Am Ende der Funktion wird tmp zerstört. Was referenziert die Referenz dann also?
Ist ja auch der Grund meines Thread. *g*
pumuckl schrieb:
stefanjann schrieb:
das Buch "C++ von A bis Z"
... fällt hier immer wieder negativ auf. Ich fürchte du hast dir da einen Stapel Papier für die Tonne zugelegt.
Nunja, für die Tonne ist/war es nicht. Es hat mir gerade zum Einstieg sehr geholfen. Und für einen groben Überblick und ne schnelle Referenz ist es immer noch ganz gut. Aber ich hab schon mehrere Fehler in dem Buch entdeckt und schon einiges mit Bleistift reingeschrieben.
Momentan bin ich eh mehr auf "C++ - Die Programmiersprache" von Bjarne Stroustrup. Das ist wirklich Klasse, aber weder als Einsteigerbuch noch als Referenz geeignet.