<?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[Zeiger vs Referenz]]></title><description><![CDATA[<p>Hi,</p>
<p>folgender Code:</p>
<pre><code class="language-cpp">class Foo {
   A* zeigerA;
   shared_ptr&lt;B&gt; bPtr;

   A* methodA() const { return zeigerA; } // das geht, trotz const

   shared_ptr&lt;B&gt;&amp; methodB() const { return bPtr; } // das geht nicht

};
</code></pre>
<p>Wieso ist hier methodA() in Ordnung, obwohl die Methode const ist? Ich kann doch über den Rückgabewert dann das auf was zeigerA zeigt ändern.</p>
<p>Und wieso ist methodB() NICHT gültig:</p>
<blockquote>
<p>Error: Qualifiers dropped in binding reference of type shared_ptr&lt;B&gt;&amp; to initializer of type const shared_ptr&lt;B&gt;</p>
</blockquote>
<p>Wieso klappt die Rückgabe bei method(), hier aber nicht (sind ja beide const)?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/290290/zeiger-vs-referenz</link><generator>RSS for Node</generator><lastBuildDate>Tue, 18 Aug 2026 16:07:56 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/290290.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 23 Jul 2011 14:42:34 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Zeiger vs Referenz on Sat, 23 Jul 2011 14:42:34 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>folgender Code:</p>
<pre><code class="language-cpp">class Foo {
   A* zeigerA;
   shared_ptr&lt;B&gt; bPtr;

   A* methodA() const { return zeigerA; } // das geht, trotz const

   shared_ptr&lt;B&gt;&amp; methodB() const { return bPtr; } // das geht nicht

};
</code></pre>
<p>Wieso ist hier methodA() in Ordnung, obwohl die Methode const ist? Ich kann doch über den Rückgabewert dann das auf was zeigerA zeigt ändern.</p>
<p>Und wieso ist methodB() NICHT gültig:</p>
<blockquote>
<p>Error: Qualifiers dropped in binding reference of type shared_ptr&lt;B&gt;&amp; to initializer of type const shared_ptr&lt;B&gt;</p>
</blockquote>
<p>Wieso klappt die Rückgabe bei method(), hier aber nicht (sind ja beide const)?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2096835</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2096835</guid><dc:creator><![CDATA[ButtermilchMH]]></dc:creator><pubDate>Sat, 23 Jul 2011 14:42:34 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger vs Referenz on Sat, 23 Jul 2011 14:47:08 GMT]]></title><description><![CDATA[<p>Es fehlt noch die Referenz auf den Zeiger</p>
<pre><code class="language-cpp">A*&amp; methodC() const { return zeigerA; }
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2096838</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2096838</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Sat, 23 Jul 2011 14:47:08 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger vs Referenz on Sat, 23 Jul 2011 14:47:39 GMT]]></title><description><![CDATA[<p>A gibt eine Kopie zurück und B eine Referenz. Der Typ der Member spielt keine Rolle und auch nicht, worauf die zeigen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2096839</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2096839</guid><dc:creator><![CDATA[TyRoXx]]></dc:creator><pubDate>Sat, 23 Jul 2011 14:47:39 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger vs Referenz on Sat, 23 Jul 2011 15:03:17 GMT]]></title><description><![CDATA[<p>ButtermilchMH schrieb:</p>
<blockquote>
<p>Wieso ist hier methodA() in Ordnung, obwohl die Methode const ist? Ich kann doch über den Rückgabewert dann das auf was zeigerA zeigt ändern.</p>
</blockquote>
<p>Weil du eine Kopie des internen Zeigers zurück gibst, den zeiger also nicht verändern kannst. Dass das Objekt, auf das der Zeiger zeigt, verändert werden kann, hat damit nichts zu tun, weils nicht Bestandteil des Objektes ist.</p>
<blockquote>
<p>Und wieso ist methodB() NICHT gültig:</p>
</blockquote>
<p>Weil du eine Referenz auf ein idrektes Element des Objekts zurückgibst und es über diese Referenz ändern könntest. Das würde das const umgehen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2096846</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2096846</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Sat, 23 Jul 2011 15:03:17 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger vs Referenz on Sat, 23 Jul 2011 15:20:40 GMT]]></title><description><![CDATA[<p>pumuckl schrieb:</p>
<blockquote>
<blockquote>
<p>Und wieso ist methodB() NICHT gültig:</p>
</blockquote>
<p>Weil du eine Referenz auf ein idrektes Element des Objekts zurückgibst und es über diese Referenz ändern könntest. Das würde das const umgehen.</p>
</blockquote>
<p>Ich dachte das const bei einer Methode heißt nur: &quot;In der Methode ändere ich kein Member&quot;. Offenbar bedeutet es also noch mehr?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2096851</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2096851</guid><dc:creator><![CDATA[ButtermilchMH]]></dc:creator><pubDate>Sat, 23 Jul 2011 15:20:40 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger vs Referenz on Sat, 23 Jul 2011 15:25:10 GMT]]></title><description><![CDATA[<p>ButtermilchMH schrieb:</p>
<blockquote>
<p>Ich dachte das const bei einer Methode heißt nur: &quot;In der Methode ändere ich kein Member&quot;. Offenbar bedeutet es also noch mehr?</p>
</blockquote>
<p>Vielleich: &quot;Ich ändere keine Member und lasse es auch nicht zu.&quot;</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2096852</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2096852</guid><dc:creator><![CDATA[EOutOfResources]]></dc:creator><pubDate>Sat, 23 Jul 2011 15:25:10 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger vs Referenz on Sat, 23 Jul 2011 18:06:11 GMT]]></title><description><![CDATA[<p><code>const</code> bei einer Methode bedeutet, dass <code>this</code> auf ein Konstantes Objekt zeigt. Das hat den Effekt, dass man keine nicht-konstanten Referenzen auf Member erzeugen kann. Eine solche Referenz braucht man natürlich für Änderungen.</p>
<p>Vielleicht hilft ja das (<s>das hintere [c]const[/c] heißt, dass der Zeiger [c]this[/c] selbst konstant ist</s>):</p>
<pre><code class="language-cpp">struct Class
{
	int member;

	void method()
	{
		this; //Class * [s]const[/s]
		this-&gt;member; //int &amp;
	}

	void method() const
	{
		this; //const Class * [s]const[/s]
		this-&gt;member; //const int &amp;
	}
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2096854</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2096854</guid><dc:creator><![CDATA[TyRoXx]]></dc:creator><pubDate>Sat, 23 Jul 2011 18:06:11 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger vs Referenz on Sat, 23 Jul 2011 17:51:06 GMT]]></title><description><![CDATA[<p>Nur damit keine Verwirrung entsteht:</p>
<p>TyRoXx schrieb:</p>
<blockquote>
<p>nicht-konstanten Referenzen</p>
</blockquote>
<p>Referenzen sind immer konstant. Was du meinst, ist eine Referenz auf ein nicht-konstantes Objekt oder kurz &quot;non-const reference&quot;.</p>
<p>TyRoXx schrieb:</p>
<blockquote>
<p>Vielleicht hilft ja das (das hintere <code>const</code> heißt, dass der Zeiger <code>this</code> selbst konstant ist)</p>
</blockquote>
<p>Ist er aber nicht, da es sich um einen skalaren RValue handelt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2096908</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2096908</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sat, 23 Jul 2011 17:51:06 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger vs Referenz on Sat, 23 Jul 2011 17:55:16 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>TyRoXx schrieb:</p>
<blockquote>
<p>nicht-konstanten Referenzen</p>
</blockquote>
<p>Was du meinst, [...] &quot;non-const reference&quot;.</p>
</blockquote>
<p>Nicht-Konstante Referenz ist also etwas anderes als Non-Const Reference?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2096914</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2096914</guid><dc:creator><![CDATA[EOutOfResources]]></dc:creator><pubDate>Sat, 23 Jul 2011 17:55:16 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger vs Referenz on Sat, 23 Jul 2011 17:55:59 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>TyRoXx schrieb:</p>
<blockquote>
<p>Vielleicht hilft ja das (das hintere <code>const</code> heißt, dass der Zeiger <code>this</code> selbst konstant ist)</p>
</blockquote>
<p>Ist er aber nicht, da es sich um einen skalaren RValue handelt.</p>
</blockquote>
<p>Und was für einen Unterschied macht das hier?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2096915</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2096915</guid><dc:creator><![CDATA[TyRoXx]]></dc:creator><pubDate>Sat, 23 Jul 2011 17:55:59 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger vs Referenz on Sat, 23 Jul 2011 18:00:12 GMT]]></title><description><![CDATA[<p>EOutOfResources schrieb:</p>
<blockquote>
<p>Nicht-Konstante Referenz ist also etwas anderes als Non-Const Reference?</p>
</blockquote>
<p>Nicht-konstante Referenzen existieren in C++ nicht.</p>
<p>Der C++-Standard verwendet die Ausdrücke &quot;non-const reference&quot; für <code>T&amp;</code> und &quot;const reference&quot; für <code>const T&amp;</code> (wobei <code>T</code> selbst nicht konstant ist).</p>
<p>TyRoXx schrieb:</p>
<blockquote>
<p>Und was für einen Unterschied macht das hier?</p>
</blockquote>
<p>Der Typ von <code>this</code> ist nicht <code>Class* const</code> oder <code>const Class* const</code> , sondern <code>Class*</code> bzw. <code>const Class*</code> . Genauso wie der Typ von <code>3</code> nicht <code>const int</code> , sondern <code>int</code> ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2096920</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2096920</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sat, 23 Jul 2011 18:00:12 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger vs Referenz on Sat, 23 Jul 2011 18:17:27 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Nicht-konstante Referenzen existieren in C++ nicht.</p>
<p>Der C++-Standard verwendet die Ausdrücke &quot;non-const reference&quot; für <code>T&amp;</code> und &quot;const reference&quot; für <code>const T&amp;</code> (wobei <code>T</code> selbst nicht konstant ist).</p>
</blockquote>
<p>Also übersetzt du &quot;non-const object&quot; mit &quot;nicht-konstantes Objekt&quot; aber &quot;non-const reference&quot; nicht mit &quot;nicht-konstante Referenz&quot;? Ich halte das für Schwachsinn. Wenn der Standard &quot;non-const reference&quot; sagt, dann kann man das doch wohl mit &quot;nicht-konstante Referenz&quot; übersetzten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2096926</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2096926</guid><dc:creator><![CDATA[EOutOfResources]]></dc:creator><pubDate>Sat, 23 Jul 2011 18:17:27 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger vs Referenz on Sat, 23 Jul 2011 18:32:52 GMT]]></title><description><![CDATA[<p>EOutOfResources schrieb:</p>
<blockquote>
<p>Wenn der Standard &quot;non-const reference&quot; sagt, dann kann man das doch wohl mit &quot;nicht-konstante Referenz&quot; übersetzten.</p>
</blockquote>
<p>Nein. Der Begriff &quot;nicht-konstante Referenz&quot; ist einfach nur falsch, da gibts nichts zu diskutieren. Referenzen sind per Definition konstant. Dass der Fehler von vielen Leuten begangen wird, macht die Sache keineswegs richtiger.</p>
<p>Du schreibst schliesslich auch <code>const_iterator</code> , obwohl der Iterator nicht konstant ist. Die Terminologie des C++-Standards hat durchaus ihre Konsistenz – im Gegensatz zu deiner (du sprichst ja auch nicht von &quot;konstantem Zeiger&quot;, wenn du das referenzierte Objekt meinst).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2096931</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2096931</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sat, 23 Jul 2011 18:32:52 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger vs Referenz on Sat, 23 Jul 2011 20:04:12 GMT]]></title><description><![CDATA[<p>Aber sprachlich besteht der Unterschied ja darin, dass const nicht das Adjektiv für konstant ist, sondern ein eigener Bezeichner ist. &quot;nicht-konstante Referenz&quot; wäre die Übersetzung für &quot;non-constant reference&quot;. Einen deutschen Ausdruck für &quot;non-const reference&quot; erscheint daher schwierig, da &quot;const&quot; einfach nur ein Schlüsselwort ist, das auch keine Übersetzung hat.</p>
<p>Daher wäre die beste deutsche Form, const unübersetzt zu lassen, was zu &quot;nicht-const Referenz&quot; führen würde.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2096964</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2096964</guid><dc:creator><![CDATA[Eisflamme]]></dc:creator><pubDate>Sat, 23 Jul 2011 20:04:12 GMT</pubDate></item></channel></rss>