this Zeiger casten?



  • hustbaer schrieb:

    this ist sowieso schonmal T* const this . Versuch mal this++ , dann siehst du es.
    Das const hinter der Parameterliste macht aus dem T* const this ein T 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.


  • Mod

    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.
    this ist sowieso schonmal T* const this . Versuch mal this++ , dann siehst du es.
    Das const hinter der Parameterliste macht aus dem T* const this ein T 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.


  • Mod

    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.


  • Mod

    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 const wegcasten und this trotzdem 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 const bezeichnen, ist entweder der Einfachheit halber (weil ein Grossteil der Leute const besser 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 const einer Funktion macht *this const, nicht this .

    Kann man das jetzt so durchgehen lassen? 🙂


Anmelden zum Antworten