<?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[Wann gibt man eine konstante Referenz zurück?]]></title><description><![CDATA[<p>Hallo Leute, habe eine Frage zu folgendem Code:</p>
<p>const Counter&amp; Counter::operator++()<br />
{<br />
++itsVal;<br />
return *this;<br />
}</p>
<p>Hier wurde der ++-Präfix-Operator überladen, wobei eine<br />
konstante Referenz auf das aktuelle Objekt (*this) zurückgegeben wird.<br />
Meine Frage ist jetzt, warum eine konstante Referenz zurückgegeben wird<br />
und nicht einfach eine normale bzw. eine nicht-konstante Referenz<br />
zurückgegeben wird.<br />
Was bewirkt man also damit, eine konstante Referenz zurückzugeben?<br />
Würde mich freuen, wenn mir das jemand erklären könnte.<br />
Danke schon mal an alle Tippfreudigen, die mir helfen möchten :)!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/274345/wann-gibt-man-eine-konstante-referenz-zurück</link><generator>RSS for Node</generator><lastBuildDate>Thu, 27 Aug 2026 14:10:40 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/274345.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 24 Sep 2010 11:26:08 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Wann gibt man eine konstante Referenz zurück? on Fri, 24 Sep 2010 11:26:08 GMT]]></title><description><![CDATA[<p>Hallo Leute, habe eine Frage zu folgendem Code:</p>
<p>const Counter&amp; Counter::operator++()<br />
{<br />
++itsVal;<br />
return *this;<br />
}</p>
<p>Hier wurde der ++-Präfix-Operator überladen, wobei eine<br />
konstante Referenz auf das aktuelle Objekt (*this) zurückgegeben wird.<br />
Meine Frage ist jetzt, warum eine konstante Referenz zurückgegeben wird<br />
und nicht einfach eine normale bzw. eine nicht-konstante Referenz<br />
zurückgegeben wird.<br />
Was bewirkt man also damit, eine konstante Referenz zurückzugeben?<br />
Würde mich freuen, wenn mir das jemand erklären könnte.<br />
Danke schon mal an alle Tippfreudigen, die mir helfen möchten :)!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1956837</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1956837</guid><dc:creator><![CDATA[Datax]]></dc:creator><pubDate>Fri, 24 Sep 2010 11:26:08 GMT</pubDate></item><item><title><![CDATA[Reply to Wann gibt man eine konstante Referenz zurück? on Fri, 24 Sep 2010 11:31:30 GMT]]></title><description><![CDATA[<p>Man gibt eine konstante Referenz zurück, damit Code wie <code>counter++ ++</code> nicht funktioniert. Denn normalerweise gibt der <code>++</code> -Postfixoperator den alten Wert zurück (insofern ist deine Implementierung &quot;fehlerhaft&quot;), ein erneutes Inkrementieren des alten Wertes ist sinnlos. Bei der Präfix-Version ist das aber durchaus möglich ( <code>++ ++counter</code> ).</p>
<p>Edit: ich sehe grade, ich habe mich verlesen, du implementierst ja die Präfix-Version. In dem Fall ist die konstante Referenz unintuitiv, die verwendet man bei der Postfix-Version.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1956841</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1956841</guid><dc:creator><![CDATA[ipsec]]></dc:creator><pubDate>Fri, 24 Sep 2010 11:31:30 GMT</pubDate></item><item><title><![CDATA[Reply to Wann gibt man eine konstante Referenz zurück? on Fri, 24 Sep 2010 11:31:28 GMT]]></title><description><![CDATA[<p>Eine konstante Referenz gibst du dann zurück, wenn das Ergebnis nicht mehr direkt bearbeitbar sein soll, const eben:</p>
<pre><code class="language-cpp">MyClass myobj;
(myobj++) = 3; // wäre bei dir nicht möglich, da op++ ein const MyClass&amp; liefert
</code></pre>
<p>MfG SideWinder</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1956843</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1956843</guid><dc:creator><![CDATA[SideWinder]]></dc:creator><pubDate>Fri, 24 Sep 2010 11:31:28 GMT</pubDate></item><item><title><![CDATA[Reply to Wann gibt man eine konstante Referenz zurück? on Fri, 24 Sep 2010 11:44:05 GMT]]></title><description><![CDATA[<p>Die Rückgabe einer Referenz auf konstante Objekte ist nicht unbedingt notwendig. Eine Faustregel bei Operatorüberladung heisst &quot;Do as the ints do&quot;, soweit möglich. Das bedeutet in diesem Falle, der Präfix- <code>operator++</code> sollte eine Referenz auf ein nicht-konstantes Objekt zurückgeben, da du sonst solche Dinge verhinderst, die mit <code>int</code> s möglich sind:</p>
<pre><code class="language-cpp">Function(++myObject); // Function() nimmt Referenz
</code></pre>
<p>Datax schrieb:</p>
<blockquote>
<p>eine nicht-konstante Referenz</p>
</blockquote>
<p>Sowas existiert in C++ nicht. <strong>Jede Referenz ist konstant.</strong></p>
<p>Was du meinst, ist das referenzierte Objekt, das über die Referenz verändert werden kann oder nicht. Ich ziehe es daher vor, von <em>Referenz auf const</em> oder <em>Const-Referenz</em> zu sprechen. Das nur so am Rande... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1956850</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1956850</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Fri, 24 Sep 2010 11:44:05 GMT</pubDate></item><item><title><![CDATA[Reply to Wann gibt man eine konstante Referenz zurück? on Fri, 24 Sep 2010 12:17:54 GMT]]></title><description><![CDATA[<p>Könntet ihr mir ein komplettes Code-Beispiel geben?<br />
Dann kann ich besser nachvollziehen, wie ihr das genau meint.<br />
Wäre super nett!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1956866</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1956866</guid><dc:creator><![CDATA[Datax]]></dc:creator><pubDate>Fri, 24 Sep 2010 12:17:54 GMT</pubDate></item><item><title><![CDATA[Reply to Wann gibt man eine konstante Referenz zurück? on Fri, 24 Sep 2010 13:07:50 GMT]]></title><description><![CDATA[<p>const vector&lt;typ&gt; &amp; func(); (1)</p>
<p>vector&lt;typ&gt; &amp; func(); (2)</p>
<p>Das da oben seien jetzt mal Methoden einer Klasse.</p>
<pre><code class="language-cpp">(1)
typ val = obj-&gt;func()[3]; // ok
obj-&gt;func().push_back(wert) // fehler

(2)
typ val = obj-&gt;func()[3]; // ok
obj-&gt;func().push_back(wert) // ok
</code></pre>
<p>Auch wenn ich der Meinung bin,<br />
dass es in der Regel keine Gute Idee ist Referenzen aus Funktionen zurückzugeben,<br />
verdeutlicht dieses Beispiel doch sehr Gut den Unterschied in der Funktionalität.</p>
<p>In beiden fällen gibst du eine Referenz zurück, doch mit dem const sagst du dazu,<br />
dass diese nicht verändert werden darf.</p>
<p>Aber mal von diesr Funktionalität abgesehen gibst du den Compiler noch den Hinweis, das diese Referenz von außen auf keinen Fall geändert wird,<br />
was wohl auch für die ein oder andere Optimierung nützlich ist ( auch wenn ich davon keine Ahnung habe wie der Compiler so arbeitet).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1956895</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1956895</guid><dc:creator><![CDATA[ka-Mensch]]></dc:creator><pubDate>Fri, 24 Sep 2010 13:07:50 GMT</pubDate></item><item><title><![CDATA[Reply to Wann gibt man eine konstante Referenz zurück? on Fri, 24 Sep 2010 13:21:59 GMT]]></title><description><![CDATA[<p>Was macht denn genau die Funktion &quot;push_back&quot;?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1956908</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1956908</guid><dc:creator><![CDATA[Datax]]></dc:creator><pubDate>Fri, 24 Sep 2010 13:21:59 GMT</pubDate></item><item><title><![CDATA[Reply to Wann gibt man eine konstante Referenz zurück? on Fri, 24 Sep 2010 13:23:20 GMT]]></title><description><![CDATA[<p>Auf <a href="http://www.cplusplus.com" rel="nofollow">www.cplusplus.com</a> nach <code>vector</code> suchen...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1956910</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1956910</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Fri, 24 Sep 2010 13:23:20 GMT</pubDate></item><item><title><![CDATA[Reply to Wann gibt man eine konstante Referenz zurück? on Sat, 25 Sep 2010 10:04:53 GMT]]></title><description><![CDATA[<p>Alles klar, habe das jetzt verstanden mit der konstanten Referenz.<br />
Vielen Dank nochmal an alle, die mir geholfen haben :)!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1957226</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1957226</guid><dc:creator><![CDATA[Datax]]></dc:creator><pubDate>Sat, 25 Sep 2010 10:04:53 GMT</pubDate></item><item><title><![CDATA[Reply to Wann gibt man eine konstante Referenz zurück? on Sat, 25 Sep 2010 10:16:55 GMT]]></title><description><![CDATA[<p>Datax schrieb:</p>
<blockquote>
<pre><code class="language-cpp">const Counter&amp; Counter::operator++()
{
   ++itsVal;
   return *this;
}
</code></pre>
<p>Hier wurde der ++-Präfix-Operator überladen, wobei eine<br />
konstante Referenz auf das aktuelle Objekt (*this) zurückgegeben wird.<br />
Meine Frage ist jetzt, warum eine konstante Referenz zurückgegeben wird<br />
und nicht einfach eine normale bzw. eine nicht-konstante Referenz<br />
zurückgegeben wird.</p>
</blockquote>
<p>Keine Ahnung. Frag den Autor, was er sich dabei gedacht hat. Das entspricht jedenfalls nicht dem Verhalten von anderen Typen wie <code>int</code> .</p>
<pre><code class="language-cpp">void haha(int&amp;);
void haha(Counter&amp;);

int main() {
  Counter c = ...;
  int     i = ...;
  ++++c; // funzt nicht
  ++++i; // funzt
  haha(++c); // funzt nicht
  haha(++i); // funzt
}
</code></pre>
<p>Datax schrieb:</p>
<blockquote>
<p>Was bewirkt man also damit, eine konstante Referenz zurückzugeben?</p>
</blockquote>
<p>Das übliche. Du kannst auf dem Ergebnis keine nicht-const Elementfunktionen aufrufen und auch nicht an Funktionen weitergeben, die eine nicht-const Referenz haben wollen.</p>
<p>kk</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1957231</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1957231</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Sat, 25 Sep 2010 10:16:55 GMT</pubDate></item></channel></rss>