<?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[Refernzen auf Referenzen sind erlaubt?]]></title><description><![CDATA[<p>Ich habe in einem Buch gelesen, dass Referenzen auf Referenzen NICHT erlaubt sind.</p>
<p>Diese beiden Funktionen verwende ich:</p>
<pre><code class="language-cpp">bool save(FILE* Datei, Dreieck&amp; source); // source ist eine Referenz auf einen
   // Speicherbereich, der dem Aufrufer gehört

bool print(Dreieck&amp; source); // hier gilt das genauso
</code></pre>
<p>Dabei wäre noch anzumerken, dass die print-Funktion nichts anderes tut als das:</p>
<pre><code class="language-cpp">bool print(Dreieck&amp; source){
 return save(stdin,source);
}
</code></pre>
<p>Der Compiler (bzw. Linker) beschwert sich aber überhaupt nicht darüber!<br />
Es tritt auch kein Runtime-Fehler oder eine Access-Violation oder ähnliches dabei ein, wenn ich beispielsweise in der main Folgendes schreibe:</p>
<pre><code class="language-cpp">int main(){
 Dreieck Tri;

 FILE* dz = fopen(&quot;Mein_Dreieck.txt&quot;,&quot;r&quot;); // Öffne die Datei

 load(dz, Tri); // Lade aus dz die Eckpunkte in die Struktur Tri

 print(Tri); // Zeige die Eckpunkte auf dem Bildschirm an

 fgetc(stdin); // Verzoegere das Schließen des Konsolenfensters

 return 0;
}
</code></pre>
<p>Der Funktionsaufruf print(Tri) müsste ja jetzt eigentlich zu einer 'Referenz auf eine Referenz' führen, weil ja print(Dreieck&amp;) nichts anderes tut, als die Referenz an eine Funktion weiter zu reichen, die ebenfalls einen Parameter als Referenz bekommt, nämlich save(FILE* datei, Dreieck&amp;).</p>
<p>Weder der Compiler noch der Linker (MS VC++ 2003) weigern sich, das Projekt zu einer .exe Datei zu kompilieren.<br />
Es tritt beim Ausführen der .exe Datei auch kein Runtime-Fehler oder eine Access-Violation auf.<br />
Das Buch behauptet aber: Eine Referenz auf eine Referenz ist verboten.</p>
<p>Wer täuscht sich denn jetzt? Das Buch? Der Compiler/Linker? Oder gilt womöglich diese Regel im Falle von 'als Referenz übergebenen Parametern' gar nicht? Weil leider steht das nirgendwo, dass das ein Ausnahmefall wäre!</p>
<p>Es wäre schön, wenn mir jemand genauer erklären könnte, ob diese Buch-Regel: 'Eine Referenz auf eine Referenz ist verboten' genauer erklären könnte!<br />
Weil womöglich hält sich auch mein Compiler einfach nicht an die Buch-Regel.</p>
<p>Danke für Tipps!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/184584/refernzen-auf-referenzen-sind-erlaubt</link><generator>RSS for Node</generator><lastBuildDate>Wed, 23 Sep 2026 18:58:04 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/184584.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 16 Jun 2007 22:30:07 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Refernzen auf Referenzen sind erlaubt? on Sat, 16 Jun 2007 22:30:07 GMT]]></title><description><![CDATA[<p>Ich habe in einem Buch gelesen, dass Referenzen auf Referenzen NICHT erlaubt sind.</p>
<p>Diese beiden Funktionen verwende ich:</p>
<pre><code class="language-cpp">bool save(FILE* Datei, Dreieck&amp; source); // source ist eine Referenz auf einen
   // Speicherbereich, der dem Aufrufer gehört

bool print(Dreieck&amp; source); // hier gilt das genauso
</code></pre>
<p>Dabei wäre noch anzumerken, dass die print-Funktion nichts anderes tut als das:</p>
<pre><code class="language-cpp">bool print(Dreieck&amp; source){
 return save(stdin,source);
}
</code></pre>
<p>Der Compiler (bzw. Linker) beschwert sich aber überhaupt nicht darüber!<br />
Es tritt auch kein Runtime-Fehler oder eine Access-Violation oder ähnliches dabei ein, wenn ich beispielsweise in der main Folgendes schreibe:</p>
<pre><code class="language-cpp">int main(){
 Dreieck Tri;

 FILE* dz = fopen(&quot;Mein_Dreieck.txt&quot;,&quot;r&quot;); // Öffne die Datei

 load(dz, Tri); // Lade aus dz die Eckpunkte in die Struktur Tri

 print(Tri); // Zeige die Eckpunkte auf dem Bildschirm an

 fgetc(stdin); // Verzoegere das Schließen des Konsolenfensters

 return 0;
}
</code></pre>
<p>Der Funktionsaufruf print(Tri) müsste ja jetzt eigentlich zu einer 'Referenz auf eine Referenz' führen, weil ja print(Dreieck&amp;) nichts anderes tut, als die Referenz an eine Funktion weiter zu reichen, die ebenfalls einen Parameter als Referenz bekommt, nämlich save(FILE* datei, Dreieck&amp;).</p>
<p>Weder der Compiler noch der Linker (MS VC++ 2003) weigern sich, das Projekt zu einer .exe Datei zu kompilieren.<br />
Es tritt beim Ausführen der .exe Datei auch kein Runtime-Fehler oder eine Access-Violation auf.<br />
Das Buch behauptet aber: Eine Referenz auf eine Referenz ist verboten.</p>
<p>Wer täuscht sich denn jetzt? Das Buch? Der Compiler/Linker? Oder gilt womöglich diese Regel im Falle von 'als Referenz übergebenen Parametern' gar nicht? Weil leider steht das nirgendwo, dass das ein Ausnahmefall wäre!</p>
<p>Es wäre schön, wenn mir jemand genauer erklären könnte, ob diese Buch-Regel: 'Eine Referenz auf eine Referenz ist verboten' genauer erklären könnte!<br />
Weil womöglich hält sich auch mein Compiler einfach nicht an die Buch-Regel.</p>
<p>Danke für Tipps!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1307471</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1307471</guid><dc:creator><![CDATA[Reverend]]></dc:creator><pubDate>Sat, 16 Jun 2007 22:30:07 GMT</pubDate></item><item><title><![CDATA[Reply to Refernzen auf Referenzen sind erlaubt? on Sat, 16 Jun 2007 22:31:49 GMT]]></title><description><![CDATA[<p>Reverend schrieb:</p>
<blockquote>
<p>Dabei wäre noch anzumerken, dass die print-Funktion nichts anderes tut als das:</p>
<pre><code class="language-cpp">bool print(Dreieck&amp; source){
 return save(stdout,source);
}
</code></pre>
</blockquote>
<p>Ausgebessert, natürlich stdout statt stdin</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1307472</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1307472</guid><dc:creator><![CDATA[Reverend]]></dc:creator><pubDate>Sat, 16 Jun 2007 22:31:49 GMT</pubDate></item><item><title><![CDATA[Reply to Refernzen auf Referenzen sind erlaubt? on Sat, 16 Jun 2007 23:02:24 GMT]]></title><description><![CDATA[<p>Die Funktion erwartet eine Referenz als Parameter, diese lieferst du. Es wird also einfach die übergebene Referenz verwendet, ohne, dass erneut referenziert wird?</p>
<p>Mit freundlichen Grüßen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1307479</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1307479</guid><dc:creator><![CDATA[Dave* 0]]></dc:creator><pubDate>Sat, 16 Jun 2007 23:02:24 GMT</pubDate></item><item><title><![CDATA[Reply to Refernzen auf Referenzen sind erlaubt? on Sat, 16 Jun 2007 23:11:15 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">bool save(FILE* datei, Dreieck&amp; source); // Der Parameter source ist eine
   // Referenz auf ein Objekt vom Typ 'Dreieck'

bool print(Dreieck&amp; source){ // Hier ebenfalls!
  return save(stdout, source); // source ist eine Referenz auf ein 'Dreieck'
         // Als Folge muesste doch die Funktion 'save' eine Referenz auf
         // eine Referenz überreicht bekommen, was angeblich nicht erlaubt
         // sein soll (zumindest laut Buch! der Compiler sieht das nicht so eng)
}
</code></pre>
<p>Deshalb habe ich mich gefragt, ob der Compiler womöglich 'beide Augen zudrückt' und 'weiß, was ich möchte', aber es laut Buch-Standard eigentlich nicht tun sollte.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1307485</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1307485</guid><dc:creator><![CDATA[Reverend]]></dc:creator><pubDate>Sat, 16 Jun 2007 23:11:15 GMT</pubDate></item><item><title><![CDATA[Reply to Refernzen auf Referenzen sind erlaubt? on Sat, 16 Jun 2007 23:27:52 GMT]]></title><description><![CDATA[<p>eine &quot;referenz auf eine referenz&quot; ist nicht das durchreichen einer referenz an eine weitere methode. eine referenz auf eine referenz wäre sowas wie</p>
<pre><code class="language-cpp">void someMethod(void &amp;&amp;param);
</code></pre>
<p>und mal davon abgesehen, dass &quot;&amp;&amp;&quot; bereits vorbelegt ist als &quot;logisches und&quot;, ist sowas schlicht nicht vorgesehen/erlaubt. gegensatz wäre sowas wie **int, ein pointer auf einen pointer. referenzen sind keine pointer.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1307491</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1307491</guid><dc:creator><![CDATA[thordk]]></dc:creator><pubDate>Sat, 16 Jun 2007 23:27:52 GMT</pubDate></item><item><title><![CDATA[Reply to Refernzen auf Referenzen sind erlaubt? on Sat, 16 Jun 2007 23:44:33 GMT]]></title><description><![CDATA[<p>thordk schrieb:</p>
<blockquote>
<p>eine &quot;referenz auf eine referenz&quot; ist nicht das durchreichen einer referenz an eine weitere methode. eine referenz auf eine referenz wäre sowas wie</p>
<pre><code class="language-cpp">void someMethod(void &amp;&amp;param);
</code></pre>
<p>und mal davon abgesehen, dass &quot;&amp;&amp;&quot; bereits vorbelegt ist als &quot;logisches und&quot;, ist sowas schlicht nicht vorgesehen/erlaubt. gegensatz wäre sowas wie **int, ein pointer auf einen pointer. referenzen sind keine pointer.</p>
</blockquote>
<p>Alles klar! Thx</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1307494</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1307494</guid><dc:creator><![CDATA[Reverend]]></dc:creator><pubDate>Sat, 16 Jun 2007 23:44:33 GMT</pubDate></item><item><title><![CDATA[Reply to Refernzen auf Referenzen sind erlaubt? on Sun, 17 Jun 2007 04:08:53 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">&amp;a = &amp;b
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1307513</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1307513</guid><dc:creator><![CDATA[hehe]]></dc:creator><pubDate>Sun, 17 Jun 2007 04:08:53 GMT</pubDate></item><item><title><![CDATA[Reply to Refernzen auf Referenzen sind erlaubt? on Sun, 17 Jun 2007 04:11:55 GMT]]></title><description><![CDATA[<p>ist das nicht referenz auf referenz? bei mir geht das ohne probleme</p>
<pre><code class="language-cpp">int c = 1234;
int &amp;a = c, &amp;b = a;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1307514</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1307514</guid><dc:creator><![CDATA[hehe]]></dc:creator><pubDate>Sun, 17 Jun 2007 04:11:55 GMT</pubDate></item><item><title><![CDATA[Reply to Refernzen auf Referenzen sind erlaubt? on Sun, 17 Jun 2007 07:04:28 GMT]]></title><description><![CDATA[<p>hehe schrieb:</p>
<blockquote>
<p>ist das nicht referenz auf referenz? bei mir geht das ohne probleme</p>
<pre><code class="language-cpp">int c = 1234;
int &amp;a = c, &amp;b = a;
</code></pre>
</blockquote>
<p>Nein.</p>
<p>a ist eine Referenz auf c und b ist eine referenz auf c. Da eine Referenz im Grude ein Alias ist, ist &amp;b = a das gleiche wie &amp;b = c in diesem Beispiel.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1307528</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1307528</guid><dc:creator><![CDATA[isla]]></dc:creator><pubDate>Sun, 17 Jun 2007 07:04:28 GMT</pubDate></item></channel></rss>