<?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[reference to reference, pointer to reference illegal?]]></title><description><![CDATA[<p>Hallo zusammen.</p>
<p>Ja, der Titel sagt eigentlich schon alles. Im C++-Primer las ich gerade dass Referenzen auf Referenzen sowie Zeiger auf Referenzen nicht erlaubt sind, da Referenzen keine Objekte sind.</p>
<p>Nur lässt sich folgender Code aber problemlos und ohne Warnungen kompilieren:</p>
<p>g++ 4.6.3</p>
<pre><code>g++ -std=c++0x -Wall -o test test.cpp
</code></pre>
<pre><code>#include &lt;iostream&gt;

using namespace std;

int main ()
{
    int i = 9;

    int &amp;ri = i;
    int &amp;r2i = ri; // ?!

    int *pi = &amp;ri; // ?!

    r2i = 13;
    cout &lt;&lt; i &lt;&lt; endl; // 13

    *pi = 27;
    cout &lt;&lt; i &lt;&lt; endl; // 27

    return 0;
}
</code></pre>
<p>C++-Primer, 5th edition:</p>
<blockquote>
<p>Because references are not objects, we may not define a reference to a reference.</p>
</blockquote>
<blockquote>
<p>Because references are not objects, they don’t have<br />
addresses. Hence, we may not define a pointer to a reference.</p>
</blockquote>
<p>Wahrscheinlich hab' ich was im englischen Text missverstanden. Danke für eure Hilfe. <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>MfG Tobi.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/316042/reference-to-reference-pointer-to-reference-illegal</link><generator>RSS for Node</generator><lastBuildDate>Thu, 30 Jul 2026 11:50:23 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/316042.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 19 Apr 2013 20:33:00 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to reference to reference, pointer to reference illegal? on Fri, 19 Apr 2013 20:34:30 GMT]]></title><description><![CDATA[<p>Hallo zusammen.</p>
<p>Ja, der Titel sagt eigentlich schon alles. Im C++-Primer las ich gerade dass Referenzen auf Referenzen sowie Zeiger auf Referenzen nicht erlaubt sind, da Referenzen keine Objekte sind.</p>
<p>Nur lässt sich folgender Code aber problemlos und ohne Warnungen kompilieren:</p>
<p>g++ 4.6.3</p>
<pre><code>g++ -std=c++0x -Wall -o test test.cpp
</code></pre>
<pre><code>#include &lt;iostream&gt;

using namespace std;

int main ()
{
    int i = 9;

    int &amp;ri = i;
    int &amp;r2i = ri; // ?!

    int *pi = &amp;ri; // ?!

    r2i = 13;
    cout &lt;&lt; i &lt;&lt; endl; // 13

    *pi = 27;
    cout &lt;&lt; i &lt;&lt; endl; // 27

    return 0;
}
</code></pre>
<p>C++-Primer, 5th edition:</p>
<blockquote>
<p>Because references are not objects, we may not define a reference to a reference.</p>
</blockquote>
<blockquote>
<p>Because references are not objects, they don’t have<br />
addresses. Hence, we may not define a pointer to a reference.</p>
</blockquote>
<p>Wahrscheinlich hab' ich was im englischen Text missverstanden. Danke für eure Hilfe. <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>MfG Tobi.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2316882</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2316882</guid><dc:creator><![CDATA[Tobi.]]></dc:creator><pubDate>Fri, 19 Apr 2013 20:34:30 GMT</pubDate></item><item><title><![CDATA[Reply to reference to reference, pointer to reference illegal? on Fri, 19 Apr 2013 20:59:02 GMT]]></title><description><![CDATA[<p>Tobi. schrieb:</p>
<blockquote>
<p>Nur lässt sich folgender Code aber problemlos und ohne Warnungen kompilieren:</p>
<pre><code>int main ()
{
    int i = 9;

    int &amp;ri = i;
    int &amp;r2i = ri; // ?!

    int *pi = &amp;ri; // ?!
}
</code></pre>
</blockquote>
<p>Ich sehe da keine Referenzen auf Referenzen und auch keine Zeiger auf Referenzen. Wie gesagt, eine Referenz ist kein Objekt. Es ist nur ein weiterer Name. Die Ausdrücke i und ri unterscheiden sich weder im Typ noch in der Wert-Kategorie. Beides sind Lvalue-Ausdrücke des Typs int und beide beziehen sich auf ein und dasselbe int-Objekt. pi ist ein Zeiger-auf-int, welcher die Adresse von i bzw ri speichert, also die Adresse des Objekts, auf das sich r und ri beziehen.</p>
<p>Mit Referenzen auf Referenzen bzw Zeiger auf Referenzen ist so etwas gemeint:</p>
<pre><code class="language-cpp">extern int &amp; &amp; gibtsnicht;
extern int &amp; * gibtsauchnicht;
</code></pre>
<p>Wobei allerdings ab C++11, wenn sich eine Referenz hinter einem Typparameter oder Typedef versteckt, so etwas schreiben darf:</p>
<pre><code class="language-cpp">typedef int&amp; intref;
typedef intref&amp; auch_eine_intref;
</code></pre>
<p><code>intref</code> und <code>auch_eine_intref</code> sind hier beides Aliase für <code>int&amp;</code> . Das ist einfach praktisch so und nennt sich &quot;reference collapsing&quot;.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2316888</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2316888</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Fri, 19 Apr 2013 20:59:02 GMT</pubDate></item><item><title><![CDATA[Reply to reference to reference, pointer to reference illegal? on Fri, 19 Apr 2013 20:59:58 GMT]]></title><description><![CDATA[<p>C++-Primer hat es richtig erklärt. Eine Referenz auf eine Referenz oder ein Pointer auf eine Referenz ist nicht möglich.</p>
<p>Eine Referenz ist die Adresse zum Speicherbereich eines Wertes.<br />
Ein Pointer ist ein Datentyp, welcher als Wert eine Adresse speichert.<br />
Was soll die Adresse einer Adresse sein? Gibt's nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2316889</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2316889</guid><dc:creator><![CDATA[Youka]]></dc:creator><pubDate>Fri, 19 Apr 2013 20:59:58 GMT</pubDate></item><item><title><![CDATA[Reply to reference to reference, pointer to reference illegal? on Fri, 19 Apr 2013 21:03:54 GMT]]></title><description><![CDATA[<p>Hi,<br />
also &quot;we may not&quot; lese ich hier als &quot;wir können nicht&quot;. Wieso können wir nicht? Weil eine Referenz kein Objekt, ist eine Referenz ist nur ein Aliasname, ein Spitzname, für ein Objekt:</p>
<pre><code>int main ()
{
    int i = 9;

    int &amp;ri = i;
    int &amp;r2i = ri; // ri ist ein Aliasname für i. Du machst also keine Referenz auf eine Referenz, sondern eine Referenz auf i... Eben genau dasselbe, wie in der Zeile drüber.

    int *pi = &amp;ri; // Das ist auch kein Zeiger auf eine Referenz... ri ist ja i... also ist &amp;ri ist die Adresse von i. Also machst du einen Zeiger auf i.
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2316890</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2316890</guid><dc:creator><![CDATA[out]]></dc:creator><pubDate>Fri, 19 Apr 2013 21:03:54 GMT</pubDate></item><item><title><![CDATA[Reply to reference to reference, pointer to reference illegal? on Fri, 19 Apr 2013 21:23:42 GMT]]></title><description><![CDATA[<p>Ich denk' ich hab es jetzt verstanden. Die theoretische schreibweise hat mir deutlich gemacht was der Text sagen will.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2316893</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2316893</guid><dc:creator><![CDATA[Tobi.]]></dc:creator><pubDate>Fri, 19 Apr 2013 21:23:42 GMT</pubDate></item></channel></rss>