<?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[Referenzen, const ref auf ref -&amp;gt; Warum ist das eine Kopie und kein Fehler?]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>folgendes Codebeispiel:</p>
<pre><code>using Map = std::map&lt;int, int&gt;;

  Map a;
  a.insert(std::make_pair(1, 2));
  a.insert(std::make_pair(2, 3));
  Map b;

  Map&amp; aRef = a;
  Map&amp; bRef = b;

  const Map&amp; aConstRef = a;

  bRef = aConstRef;
</code></pre>
<p>Unter MS VC2013 kompiliert das ohne Fehler durch.</p>
<p>Ich hätte jetzt erwartet, dass er in der letzten Zeile ein Fehler meldet, das eine Const-Ref nicht auf ein Non-Const-Ref zugewiesen werden kann. Angenommen unter einer reinen Non-Const Zuweisung hätte ich erwartet, dass bRef auch eine Referenz auf a hält.</p>
<pre><code>bRef = aRef;
</code></pre>
<p>Aus welchem Grund kompiliert er das und macht eine Kopie von a nach b?<br />
Oder andersherum, warum ist meine Erwartungshaltung an dieser Stelle falsch?</p>
<p>Vielen Dank fürs erhellen.</p>
<p>Viele Grüße,</p>
<p>Jakob</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/335674/referenzen-const-ref-auf-ref-gt-warum-ist-das-eine-kopie-und-kein-fehler</link><generator>RSS for Node</generator><lastBuildDate>Fri, 24 Apr 2026 10:59:32 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/335674.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 03 Dec 2015 18:30:46 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Referenzen, const ref auf ref -&amp;gt; Warum ist das eine Kopie und kein Fehler? on Thu, 03 Dec 2015 18:30:46 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>folgendes Codebeispiel:</p>
<pre><code>using Map = std::map&lt;int, int&gt;;

  Map a;
  a.insert(std::make_pair(1, 2));
  a.insert(std::make_pair(2, 3));
  Map b;

  Map&amp; aRef = a;
  Map&amp; bRef = b;

  const Map&amp; aConstRef = a;

  bRef = aConstRef;
</code></pre>
<p>Unter MS VC2013 kompiliert das ohne Fehler durch.</p>
<p>Ich hätte jetzt erwartet, dass er in der letzten Zeile ein Fehler meldet, das eine Const-Ref nicht auf ein Non-Const-Ref zugewiesen werden kann. Angenommen unter einer reinen Non-Const Zuweisung hätte ich erwartet, dass bRef auch eine Referenz auf a hält.</p>
<pre><code>bRef = aRef;
</code></pre>
<p>Aus welchem Grund kompiliert er das und macht eine Kopie von a nach b?<br />
Oder andersherum, warum ist meine Erwartungshaltung an dieser Stelle falsch?</p>
<p>Vielen Dank fürs erhellen.</p>
<p>Viele Grüße,</p>
<p>Jakob</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2478080</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2478080</guid><dc:creator><![CDATA[__jb__]]></dc:creator><pubDate>Thu, 03 Dec 2015 18:30:46 GMT</pubDate></item><item><title><![CDATA[Reply to Referenzen, const ref auf ref -&amp;gt; Warum ist das eine Kopie und kein Fehler? on Thu, 03 Dec 2015 18:44:19 GMT]]></title><description><![CDATA[<p>Man kann bei Referenzen, im Gegensatz zu Pointern, nachträglich nicht mehr ändern auf welches Objekt diese verweisen. Eine Zuweisung ändert daher das Objekt wohin die Referenz gerade zeigt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2478083</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2478083</guid><dc:creator><![CDATA[sebi707]]></dc:creator><pubDate>Thu, 03 Dec 2015 18:44:19 GMT</pubDate></item><item><title><![CDATA[Reply to Referenzen, const ref auf ref -&amp;gt; Warum ist das eine Kopie und kein Fehler? on Thu, 03 Dec 2015 19:49:45 GMT]]></title><description><![CDATA[<p>Noch ein Zusatz: Man kann sich Referenzen auch als Alias vorstellen:<br />
Man macht dem Programm ein und dasselbe Objekt unter einem weiteren Namen bekannt.<br />
Unter diesem Aspekt empfinde ich zumindest persönlich das Verhalten, das dich hier stutzig macht als ziemlich intuitiv.</p>
<p>Gruss,<br />
Finnegan</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2478090</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2478090</guid><dc:creator><![CDATA[Finnegan]]></dc:creator><pubDate>Thu, 03 Dec 2015 19:49:45 GMT</pubDate></item><item><title><![CDATA[Reply to Referenzen, const ref auf ref -&amp;gt; Warum ist das eine Kopie und kein Fehler? on Fri, 04 Dec 2015 04:36:28 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/31711">@Finnegan</a><br />
Jo... is irgendwie schon ein bisschen ... eigen. Das mit den Referenzen.</p>
<p>Bei boost::tie hab ich mir halt schon als erstes mal gedacht ... WTF?</p>
<p>Wenn mans mal verstanden hat ist es natürlich logisch.<br />
Aber auf den 1. Blick mal recht un-intuitiv dass beim Erzeugen der Referenz was komplett anderes passiert wie wenn man danach ne Zuweisung macht.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/32567">@__jb__</a></p>
<p><strong>jb</strong> schrieb:</p>
<blockquote>
<p>Angenommen unter einer reinen Non-Const Zuweisung hätte ich erwartet, dass bRef auch eine Referenz auf a hält.</p>
<pre><code>bRef = aRef;
</code></pre>
<p>Aus welchem Grund kompiliert er das und macht eine Kopie von a nach b?<br />
Oder andersherum, warum ist meine Erwartungshaltung an dieser Stelle falsch?</p>
</blockquote>
<p>Weil die Regeln für Referenzen halt andere sind als du erwartet hast <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="😉"
    /><br />
Im Prinzip kannst du dir vorstellen dass ne Referenz in C++ ein Zeiger ist, bei dessen Verwendung NACH der Deklaration immer automatisch ein * davor gemacht wird.</p>
<p>Dadurch kann man ja <code>ref.x = 123;</code> etc. mit &quot;.&quot; schreiben statt mit &quot;-&gt;&quot;.</p>
<p>Und dann natürlich auch</p>
<pre><code>bRef = aRef;
// entspricht
*bPtr = *aPtr;
</code></pre>
<p>Und dann sollte klar sein warum das Objekt geändert wird, und nicht die Referenz auf ein anderes Objekt &quot;verbogen&quot;.</p>
<p>Was sich dadurch auch klärt ist was bei <code>sizeof(aRef)</code> rauskommt, nämlich <code>sizeof(A)</code> , NICHT <code>sizeof(A*)</code> (mit <code>A&amp; aRef = someA;</code> ).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2478124</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2478124</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Fri, 04 Dec 2015 04:36:28 GMT</pubDate></item><item><title><![CDATA[Reply to Referenzen, const ref auf ref -&amp;gt; Warum ist das eine Kopie und kein Fehler? on Fri, 04 Dec 2015 09:28:02 GMT]]></title><description><![CDATA[<p>Ich mag die Erklärung:</p>
<p>eine Referenz ist ein Aliasnahme der Attribute (const/volatile/etc.) hinzufügen kann.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2478143</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2478143</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Fri, 04 Dec 2015 09:28:02 GMT</pubDate></item><item><title><![CDATA[Reply to Referenzen, const ref auf ref -&amp;gt; Warum ist das eine Kopie und kein Fehler? on Fri, 04 Dec 2015 15:03:37 GMT]]></title><description><![CDATA[<p>Vielen Dank euch!</p>
<p>Mit etwas Abstand und den Erklärungen ist es mehr als einleuchtend <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="🙂"
    /><br />
Sonst würde ja auch eine Wertzuweisung (auf eine Referenz) ja gar nicht funktionieren ... ^^</p>
<p>Wünsche Euch ein gelungenes Wochenende.</p>
<p>Grüße</p>
<p>Jakob</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2478187</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2478187</guid><dc:creator><![CDATA[__jb__]]></dc:creator><pubDate>Fri, 04 Dec 2015 15:03:37 GMT</pubDate></item></channel></rss>