<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[this Zeiger casten?]]></title><description><![CDATA[<p>Warum ist hier ein cast Notwendig:</p>
<pre><code class="language-cpp">class TriangleMesh;

class Triangle
{
public:
    Triangle(TriangleMesh *pMesh);
}

class TriangleMesh : public IShape
{
public:
	virtual void doIt const
	{
	      Triangle *pTriangle = new Triangle((TriangleMesh*)this);
	}
};
</code></pre>
<p>Ist der this Zeiger immer vom Tpy Basisklassse *?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/277077/this-zeiger-casten</link><generator>RSS for Node</generator><lastBuildDate>Wed, 26 Aug 2026 03:01:09 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/277077.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 12 Nov 2010 16:40:35 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to this Zeiger casten? on Fri, 12 Nov 2010 16:41:22 GMT]]></title><description><![CDATA[<p>Warum ist hier ein cast Notwendig:</p>
<pre><code class="language-cpp">class TriangleMesh;

class Triangle
{
public:
    Triangle(TriangleMesh *pMesh);
}

class TriangleMesh : public IShape
{
public:
	virtual void doIt const
	{
	      Triangle *pTriangle = new Triangle((TriangleMesh*)this);
	}
};
</code></pre>
<p>Ist der this Zeiger immer vom Tpy Basisklassse *?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1979586</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1979586</guid><dc:creator><![CDATA[Vertexwahn]]></dc:creator><pubDate>Fri, 12 Nov 2010 16:41:22 GMT</pubDate></item><item><title><![CDATA[Reply to this Zeiger casten? on Fri, 12 Nov 2010 16:47:06 GMT]]></title><description><![CDATA[<p>Wenn du hier einen Cast brauchst, dann vllt weil this vom Typ<br />
const TriangleMesh* const ist, der Triangle Ctor aber einen nicht-konstanten Pointer erwartet.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1979590</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1979590</guid><dc:creator><![CDATA[this-*gt*that]]></dc:creator><pubDate>Fri, 12 Nov 2010 16:47:06 GMT</pubDate></item><item><title><![CDATA[Reply to this Zeiger casten? on Fri, 12 Nov 2010 16:57:06 GMT]]></title><description><![CDATA[<p>this-&gt;that schrieb:</p>
<blockquote>
<p>Wenn du hier einen Cast brauchst, dann vllt weil this vom Typ<br />
const TriangleMesh* const ist, der Triangle Ctor aber einen nicht-konstanten Pointer erwartet.</p>
</blockquote>
<p>Der Typ müsste aber <strong>TriangleMesh * const</strong> sein denk ich; das Objekt ansich ist ja nicht const, nur der Zeiger.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1979593</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1979593</guid><dc:creator><![CDATA[inter2k3]]></dc:creator><pubDate>Fri, 12 Nov 2010 16:57:06 GMT</pubDate></item><item><title><![CDATA[Reply to this Zeiger casten? on Fri, 12 Nov 2010 20:41:11 GMT]]></title><description><![CDATA[<p>inter2k3 schrieb:</p>
<blockquote>
<p>this-&gt;that schrieb:</p>
<blockquote>
<p>Wenn du hier einen Cast brauchst, dann vllt weil this vom Typ<br />
const TriangleMesh* const ist, der Triangle Ctor aber einen nicht-konstanten Pointer erwartet.</p>
</blockquote>
<p>Der Typ müsste aber <strong>TriangleMesh * const</strong> sein denk ich; das Objekt ansich ist ja nicht const, nur der Zeiger.</p>
</blockquote>
<p>Nein.<br />
<code>this</code> ist sowieso schonmal <code>T* const this</code> . Versuch mal <code>this++</code> , dann siehst du es.<br />
Das <code>const</code> hinter der Parameterliste macht aus dem <code>T* const this</code> ein <code>T const* const this</code> .</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1979680</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1979680</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Fri, 12 Nov 2010 20:41:11 GMT</pubDate></item><item><title><![CDATA[Reply to this Zeiger casten? on Fri, 12 Nov 2010 20:46:03 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p><code>this</code> ist sowieso schonmal <code>T* const this</code> . Versuch mal <code>this++</code> , dann siehst du es.<br />
Das <code>const</code> hinter der Parameterliste macht aus dem <code>T* const this</code> ein <code>T const* const this</code> .</p>
</blockquote>
<p>Das habe ich verstanden. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /><br />
Aber ich fürchte, so komprimiert versteht man es nur, wenn man es vorher schon wußte. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1979683</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1979683</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Fri, 12 Nov 2010 20:46:03 GMT</pubDate></item><item><title><![CDATA[Reply to this Zeiger casten? on Fri, 12 Nov 2010 20:49:51 GMT]]></title><description><![CDATA[<p>Vertexwahn schrieb:</p>
<blockquote>
<p>Warum ist hier ein cast Notwendig:</p>
</blockquote>
<p>Weil, ich vermute mal was, vielleicht</p>
<pre><code class="language-cpp">class Triangle
{
public:
    Triangle(TriangleMesh const * pMesh);
};
</code></pre>
<p>dort das const gefehlt hat.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1979686</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1979686</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Fri, 12 Nov 2010 20:49:51 GMT</pubDate></item><item><title><![CDATA[Reply to this Zeiger casten? on Fri, 12 Nov 2010 22:35:57 GMT]]></title><description><![CDATA[<p>inter2k3 schrieb:</p>
<blockquote>
<p>this-&gt;that schrieb:</p>
<blockquote>
<p>Wenn du hier einen Cast brauchst, dann vllt weil this vom Typ<br />
const TriangleMesh* const ist, der Triangle Ctor aber einen nicht-konstanten Pointer erwartet.</p>
</blockquote>
<p>Der Typ müsste aber <strong>TriangleMesh * const</strong> sein denk ich; das Objekt ansich ist ja nicht const, nur der Zeiger.</p>
</blockquote>
<p>Das Objekt ist const, weil die Memberfunktion const ist, also const TriangleMesh*</p>
<p>hustbaer schrieb:</p>
<blockquote>
<p>inter2k3 schrieb:</p>
<blockquote>
<p>this-&gt;that schrieb:</p>
<blockquote>
<p>Wenn du hier einen Cast brauchst, dann vllt weil this vom Typ<br />
const TriangleMesh* const ist, der Triangle Ctor aber einen nicht-konstanten Pointer erwartet.</p>
</blockquote>
<p>Der Typ müsste aber <strong>TriangleMesh * const</strong> sein denk ich; das Objekt ansich ist ja nicht const, nur der Zeiger.</p>
</blockquote>
<p>Nein.<br />
<code>this</code> ist sowieso schonmal <code>T* const this</code> . Versuch mal <code>this++</code> , dann siehst du es.<br />
Das <code>const</code> hinter der Parameterliste macht aus dem <code>T* const this</code> ein <code>T const* const this</code> .</p>
</blockquote>
<p>Überzeugend aber trotzdem falsch.<br />
Ich kann auch nicht 3++ schreiben, das macht 3 aber noch lange nicht zu const int.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1979727</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1979727</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Fri, 12 Nov 2010 22:35:57 GMT</pubDate></item><item><title><![CDATA[Reply to this Zeiger casten? on Fri, 12 Nov 2010 22:47:48 GMT]]></title><description><![CDATA[<p>camper schrieb:</p>
<blockquote>
<p>Überzeugend aber trotzdem falsch.<br />
Ich kann auch nicht 3++ schreiben, das macht 3 aber noch lange nicht zu const int.</p>
</blockquote>
<p>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.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1979732</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1979732</guid><dc:creator><![CDATA[this-*gt*that]]></dc:creator><pubDate>Fri, 12 Nov 2010 22:47:48 GMT</pubDate></item><item><title><![CDATA[Reply to this Zeiger casten? on Fri, 12 Nov 2010 22:53:40 GMT]]></title><description><![CDATA[<p>this-&gt;that schrieb:</p>
<blockquote>
<p>camper schrieb:</p>
<blockquote>
<p>Überzeugend aber trotzdem falsch.<br />
Ich kann auch nicht 3++ schreiben, das macht 3 aber noch lange nicht zu const int.</p>
</blockquote>
<p>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.</p>
</blockquote>
<p>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.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1979734</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1979734</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Fri, 12 Nov 2010 22:53:40 GMT</pubDate></item><item><title><![CDATA[Reply to this Zeiger casten? on Fri, 12 Nov 2010 23:07:40 GMT]]></title><description><![CDATA[<p>camper schrieb:</p>
<blockquote>
<p>this-&gt;that schrieb:</p>
<blockquote>
<p>camper schrieb:</p>
<blockquote>
<p>Überzeugend aber trotzdem falsch.<br />
Ich kann auch nicht 3++ schreiben, das macht 3 aber noch lange nicht zu const int.</p>
</blockquote>
<p>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.</p>
</blockquote>
<p>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.</p>
</blockquote>
<p>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.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1979740</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1979740</guid><dc:creator><![CDATA[this-*gt*that]]></dc:creator><pubDate>Fri, 12 Nov 2010 23:07:40 GMT</pubDate></item><item><title><![CDATA[Reply to this Zeiger casten? on Fri, 12 Nov 2010 23:18:52 GMT]]></title><description><![CDATA[<p>this-&gt;that schrieb:</p>
<blockquote>
<p>camper schrieb:</p>
<blockquote>
<p>this-&gt;that schrieb:</p>
<blockquote>
<p>camper schrieb:</p>
<blockquote>
<p>Überzeugend aber trotzdem falsch.<br />
Ich kann auch nicht 3++ schreiben, das macht 3 aber noch lange nicht zu const int.</p>
</blockquote>
<p>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.</p>
</blockquote>
<p>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.</p>
</blockquote>
<p>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.</p>
</blockquote>
<p>Beide behauptet ihr, der Type wäre T* const. Das ist falsch.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1979744</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1979744</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Fri, 12 Nov 2010 23:18:52 GMT</pubDate></item><item><title><![CDATA[Reply to this Zeiger casten? on Fri, 12 Nov 2010 23:50:01 GMT]]></title><description><![CDATA[<p>camper schrieb:</p>
<blockquote>
<p>this-&gt;that schrieb:</p>
<blockquote>
<p>camper schrieb:</p>
<blockquote>
<p>this-&gt;that schrieb:</p>
<blockquote>
<p>camper schrieb:</p>
<blockquote>
<p>Überzeugend aber trotzdem falsch.<br />
Ich kann auch nicht 3++ schreiben, das macht 3 aber noch lange nicht zu const int.</p>
</blockquote>
<p>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.</p>
</blockquote>
<p>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.</p>
</blockquote>
<p>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.</p>
</blockquote>
<p>Beide behauptet ihr, der Type wäre T* const. Das ist falsch.</p>
</blockquote>
<p>Vom Verhalten her ist er es.</p>
<p>Außerdem liest man diese Erklärung in verdammt vielen Erläuterungen:<br />
<a href="http://msdn.microsoft.com/en-us/library/ytk2ae82.aspx" rel="nofollow">http://msdn.microsoft.com/en-us/library/ytk2ae82.aspx</a></p>
<blockquote>
<p>[cv-qualifier-list] class-type * const this</p>
<p>In other words, this is always a const pointer;</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/1979749</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1979749</guid><dc:creator><![CDATA[this-*gt*that]]></dc:creator><pubDate>Fri, 12 Nov 2010 23:50:01 GMT</pubDate></item><item><title><![CDATA[Reply to this Zeiger casten? on Sat, 13 Nov 2010 05:22:14 GMT]]></title><description><![CDATA[<p>Und der compiler sagt bei this++<br />
error C2105: '++' muss ein L-Wert sein</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1979762</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1979762</guid><dc:creator><![CDATA[YouReallyGotMe]]></dc:creator><pubDate>Sat, 13 Nov 2010 05:22:14 GMT</pubDate></item><item><title><![CDATA[Reply to this Zeiger casten? on Sat, 13 Nov 2010 10:43:17 GMT]]></title><description><![CDATA[<p>this-&gt;that schrieb:</p>
<blockquote>
<p>Vom Verhalten her ist er es.</p>
</blockquote>
<p>Nein, ist er nicht. Ich kann z.B. nicht <code>const</code> wegcasten und <code>this</code> trotzdem verändern.</p>
<p>this-&gt;that schrieb:</p>
<blockquote>
<p>Außerdem liest man diese Erklärung in verdammt vielen Erläuterungen</p>
</blockquote>
<p>Du solltest wissen, dass bei sowas nur der Standard zählt. Und der sagt:</p>
<p>§9.3.2/1 The this pointer schrieb:</p>
<blockquote>
<p>In the body of a nonstatic member function, the keyword this is <strong>a non-lvalue expression</strong> 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 <strong>X</strong>*.</p>
</blockquote>
<p>Dass andere ihn als <code>const</code> bezeichnen, ist entweder der Einfachheit halber (weil ein Grossteil der Leute <code>const</code> besser versteht als rvalue/lvalue) oder aus Unwissenheit. Jedenfalls ist es falsch.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1979801</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1979801</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sat, 13 Nov 2010 10:43:17 GMT</pubDate></item><item><title><![CDATA[Reply to this Zeiger casten? on Sat, 13 Nov 2010 15:31:08 GMT]]></title><description><![CDATA[<p>camper schrieb:</p>
<blockquote>
<p>this-&gt;that schrieb:</p>
<blockquote>
<p>camper schrieb:</p>
<blockquote>
<p>this-&gt;that schrieb:</p>
<blockquote>
<p>camper schrieb:</p>
<blockquote>
<p>Überzeugend aber trotzdem falsch.<br />
Ich kann auch nicht 3++ schreiben, das macht 3 aber noch lange nicht zu const int.</p>
</blockquote>
<p>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.</p>
</blockquote>
<p>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.</p>
</blockquote>
<p>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.</p>
</blockquote>
<p>Beide behauptet ihr, der Type wäre T* const. Das ist falsch.</p>
</blockquote>
<p>Ich ziehe meine Behauptung zurück <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>Ja, this ist ne rvalue.</p>
<p>Was ich damit sagen wollte war aber hoffentlich klar: das <code>const</code> einer Funktion macht <code>*this</code> const, nicht <code>this</code> .</p>
<p>Kann man das jetzt so durchgehen lassen? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1979946</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1979946</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Sat, 13 Nov 2010 15:31:08 GMT</pubDate></item></channel></rss>