this Zeiger casten?
-
inter2k3 schrieb:
this->that schrieb:
Wenn du hier einen Cast brauchst, dann vllt weil this vom Typ
const TriangleMesh* const ist, der Triangle Ctor aber einen nicht-konstanten Pointer erwartet.Der Typ müsste aber TriangleMesh * const sein denk ich; das Objekt ansich ist ja nicht const, nur der Zeiger.
Nein.
thisist sowieso schonmalT* const this. Versuch malthis++, dann siehst du es.
Dasconsthinter der Parameterliste macht aus demT* const thiseinT const* const this.
-
hustbaer schrieb:
thisist sowieso schonmalT* const this. Versuch malthis++, dann siehst du es.
Dasconsthinter der Parameterliste macht aus demT* const thiseinT const* const this.Das habe ich verstanden.

Aber ich fürchte, so komprimiert versteht man es nur, wenn man es vorher schon wußte.
-
Vertexwahn schrieb:
Warum ist hier ein cast Notwendig:
Weil, ich vermute mal was, vielleicht
class Triangle { public: Triangle(TriangleMesh const * pMesh); };dort das const gefehlt hat.
-
inter2k3 schrieb:
this->that schrieb:
Wenn du hier einen Cast brauchst, dann vllt weil this vom Typ
const TriangleMesh* const ist, der Triangle Ctor aber einen nicht-konstanten Pointer erwartet.Der Typ müsste aber TriangleMesh * const sein denk ich; das Objekt ansich ist ja nicht const, nur der Zeiger.
Das Objekt ist const, weil die Memberfunktion const ist, also const TriangleMesh*
hustbaer schrieb:
inter2k3 schrieb:
this->that schrieb:
Wenn du hier einen Cast brauchst, dann vllt weil this vom Typ
const TriangleMesh* const ist, der Triangle Ctor aber einen nicht-konstanten Pointer erwartet.Der Typ müsste aber TriangleMesh * const sein denk ich; das Objekt ansich ist ja nicht const, nur der Zeiger.
Nein.
thisist sowieso schonmalT* const this. Versuch malthis++, dann siehst du es.
Dasconsthinter der Parameterliste macht aus demT* const thiseinT const* const this.Überzeugend aber trotzdem falsch.
Ich kann auch nicht 3++ schreiben, das macht 3 aber noch lange nicht zu const int.
-
camper schrieb:
Überzeugend aber trotzdem falsch.
Ich kann auch nicht 3++ schreiben, das macht 3 aber noch lange nicht zu const int.Nein das war nicht falsch. Wenn bei einem Zeiger der Inhalt nicht geändert werden kann, dann ist der Zeiger konstant. Das belegt, dass this offenbar vom Typ const T* const sein muss.
-
this->that schrieb:
camper schrieb:
Überzeugend aber trotzdem falsch.
Ich kann auch nicht 3++ schreiben, das macht 3 aber noch lange nicht zu const int.Nein das war nicht falsch. Wenn bei einem Zeiger der Inhalt nicht geändert werden kann, dann ist der Zeiger konstant. Das belegt, dass this offenbar vom Typ const T* const sein muss.
this is ein rvalue, so wie das literal 3 ein rvalue ist. Sklara rvalues sind niemals const-qualifiziert. Die Nichtveränderbarkeit ist einfache Folge des rvalue-Seins.
-
camper schrieb:
this->that schrieb:
camper schrieb:
Überzeugend aber trotzdem falsch.
Ich kann auch nicht 3++ schreiben, das macht 3 aber noch lange nicht zu const int.Nein das war nicht falsch. Wenn bei einem Zeiger der Inhalt nicht geändert werden kann, dann ist der Zeiger konstant. Das belegt, dass this offenbar vom Typ const T* const sein muss.
this is ein rvalue, so wie das literal 3 ein rvalue ist. Sklara rvalues sind niemals const-qualifiziert. Die Nichtveränderbarkeit ist einfache Folge des rvalue-Seins.
Es hat ja auch niemand was anderes behauptet. hustbaer hat lediglich gesagt this ist ein konstanter Zeiger. Und der Postinkrementoperator geht eben nicht auf konstanten Zeigern. Absolut richtig.
-
this->that schrieb:
camper schrieb:
this->that schrieb:
camper schrieb:
Überzeugend aber trotzdem falsch.
Ich kann auch nicht 3++ schreiben, das macht 3 aber noch lange nicht zu const int.Nein das war nicht falsch. Wenn bei einem Zeiger der Inhalt nicht geändert werden kann, dann ist der Zeiger konstant. Das belegt, dass this offenbar vom Typ const T* const sein muss.
this is ein rvalue, so wie das literal 3 ein rvalue ist. Sklara rvalues sind niemals const-qualifiziert. Die Nichtveränderbarkeit ist einfache Folge des rvalue-Seins.
Es hat ja auch niemand was anderes behauptet. hustbaer hat lediglich gesagt this ist ein konstanter Zeiger. Und der Postinkrementoperator geht eben nicht auf konstanten Zeigern. Absolut richtig.
Beide behauptet ihr, der Type wäre T* const. Das ist falsch.
-
camper schrieb:
this->that schrieb:
camper schrieb:
this->that schrieb:
camper schrieb:
Überzeugend aber trotzdem falsch.
Ich kann auch nicht 3++ schreiben, das macht 3 aber noch lange nicht zu const int.Nein das war nicht falsch. Wenn bei einem Zeiger der Inhalt nicht geändert werden kann, dann ist der Zeiger konstant. Das belegt, dass this offenbar vom Typ const T* const sein muss.
this is ein rvalue, so wie das literal 3 ein rvalue ist. Sklara rvalues sind niemals const-qualifiziert. Die Nichtveränderbarkeit ist einfache Folge des rvalue-Seins.
Es hat ja auch niemand was anderes behauptet. hustbaer hat lediglich gesagt this ist ein konstanter Zeiger. Und der Postinkrementoperator geht eben nicht auf konstanten Zeigern. Absolut richtig.
Beide behauptet ihr, der Type wäre T* const. Das ist falsch.
Vom Verhalten her ist er es.
Außerdem liest man diese Erklärung in verdammt vielen Erläuterungen:
http://msdn.microsoft.com/en-us/library/ytk2ae82.aspx[cv-qualifier-list] class-type * const this
In other words, this is always a const pointer;
-
Und der compiler sagt bei this++
error C2105: '++' muss ein L-Wert sein
-
this->that schrieb:
Vom Verhalten her ist er es.
Nein, ist er nicht. Ich kann z.B. nicht
constwegcasten undthistrotzdem verändern.this->that schrieb:
Außerdem liest man diese Erklärung in verdammt vielen Erläuterungen
Du solltest wissen, dass bei sowas nur der Standard zählt. Und der sagt:
§9.3.2/1 The this pointer schrieb:
In the body of a nonstatic member function, the keyword this is a non-lvalue expression whose value is the address of the object for which the function is called. The type of this in a member function of a class X is X*.
Dass andere ihn als
constbezeichnen, ist entweder der Einfachheit halber (weil ein Grossteil der Leuteconstbesser versteht als rvalue/lvalue) oder aus Unwissenheit. Jedenfalls ist es falsch.
-
camper schrieb:
this->that schrieb:
camper schrieb:
this->that schrieb:
camper schrieb:
Überzeugend aber trotzdem falsch.
Ich kann auch nicht 3++ schreiben, das macht 3 aber noch lange nicht zu const int.Nein das war nicht falsch. Wenn bei einem Zeiger der Inhalt nicht geändert werden kann, dann ist der Zeiger konstant. Das belegt, dass this offenbar vom Typ const T* const sein muss.
this is ein rvalue, so wie das literal 3 ein rvalue ist. Sklara rvalues sind niemals const-qualifiziert. Die Nichtveränderbarkeit ist einfache Folge des rvalue-Seins.
Es hat ja auch niemand was anderes behauptet. hustbaer hat lediglich gesagt this ist ein konstanter Zeiger. Und der Postinkrementoperator geht eben nicht auf konstanten Zeigern. Absolut richtig.
Beide behauptet ihr, der Type wäre T* const. Das ist falsch.
Ich ziehe meine Behauptung zurück

Ja, this ist ne rvalue.
Was ich damit sagen wollte war aber hoffentlich klar: das
consteiner Funktion macht*thisconst, nichtthis.Kann man das jetzt so durchgehen lassen?
