<?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[Mehrfachreferenzen]]></title><description><![CDATA[<p>Hallo,</p>
<p>der C++ Standard sagt laut Wikipedia folgendes: &quot;There shall be no references to references, no arrays of references, and no pointers to references.&quot;</p>
<p>Was ist mit &quot;references to references&quot; gemeint?</p>
<p>Wenn ich z.B. folgende Situation habe:</p>
<pre><code class="language-cpp">class A { };

void bar(const A&amp; a)
{
  // Process a
}

void foo(const A&amp; a)
{
  bar(a);
}

int main()
{
  A a;
  foo(a);
}
</code></pre>
<p>Ist das a in bar() dann eine Referenz auf eine Referenz und deswegen nicht legal?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/274346/mehrfachreferenzen</link><generator>RSS for Node</generator><lastBuildDate>Thu, 27 Aug 2026 14:10:54 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/274346.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 24 Sep 2010 11:41:11 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Mehrfachreferenzen on Fri, 24 Sep 2010 11:41:11 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>der C++ Standard sagt laut Wikipedia folgendes: &quot;There shall be no references to references, no arrays of references, and no pointers to references.&quot;</p>
<p>Was ist mit &quot;references to references&quot; gemeint?</p>
<p>Wenn ich z.B. folgende Situation habe:</p>
<pre><code class="language-cpp">class A { };

void bar(const A&amp; a)
{
  // Process a
}

void foo(const A&amp; a)
{
  bar(a);
}

int main()
{
  A a;
  foo(a);
}
</code></pre>
<p>Ist das a in bar() dann eine Referenz auf eine Referenz und deswegen nicht legal?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1956846</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1956846</guid><dc:creator><![CDATA[Referenz]]></dc:creator><pubDate>Fri, 24 Sep 2010 11:41:11 GMT</pubDate></item><item><title><![CDATA[Reply to Mehrfachreferenzen on Fri, 24 Sep 2010 11:46:57 GMT]]></title><description><![CDATA[<p>Nein, beim Aufruf von bar wird die Referenz einfach weitergereicht. Damit ist einfach gemeint, dass sowas nicht geht:</p>
<pre><code class="language-cpp">int i = 0;
int &amp; r = i; // ok
int &amp; &amp; rr = r; // nicht ok
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1956852</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1956852</guid><dc:creator><![CDATA[Bashar]]></dc:creator><pubDate>Fri, 24 Sep 2010 11:46:57 GMT</pubDate></item><item><title><![CDATA[Reply to Mehrfachreferenzen on Fri, 24 Sep 2010 18:14:10 GMT]]></title><description><![CDATA[<p>Bashar schrieb:</p>
<blockquote>
<pre><code class="language-cpp">int i = 0;
int &amp; r = i; // ok
int &amp; &amp; rr = r; // nicht ok
</code></pre>
</blockquote>
<pre><code class="language-cpp">int &amp; r2 = r; // auch OK, r bezieht sich ja auf i
              // und r2 ist auch nur eine Referenz-auf-int
</code></pre>
<p>Man kann sich Referenzen als automatisch dereferenzierende Zeiger vorstellen, bei denen man beim Initialisieren auch nicht den Adress-Operator benötigt:</p>
<pre><code class="language-cpp">int   i = 0;

int &amp; r = i;
cout &lt;&lt; r;

int * p = &amp;i;
cout &lt;&lt; *p;
</code></pre>
<p>Dementsprechend ist</p>
<pre><code class="language-cpp">int &amp; r2 = r;
cout &lt;&lt; r2;
</code></pre>
<p>vergleichbar mit</p>
<pre><code class="language-cpp">int * p2 = &amp;r; // Beachte: &amp;r == &amp;i
cout &lt;&lt; *p2;
</code></pre>
<p>kk</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1957020</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1957020</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Fri, 24 Sep 2010 18:14:10 GMT</pubDate></item><item><title><![CDATA[Reply to Mehrfachreferenzen on Fri, 24 Sep 2010 20:45:54 GMT]]></title><description><![CDATA[<p>Hallo,<br />
danke erstmal für die Erklärung. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
<p>krümelkacker schrieb:</p>
<blockquote>
<p>Dementsprechend ist</p>
<pre><code class="language-cpp">int &amp; r2 = r;
cout &lt;&lt; r2;
</code></pre>
<p>vergleichbar mit</p>
<pre><code class="language-cpp">int * p2 = &amp;r; // Beachte: &amp;r == &amp;i
cout &lt;&lt; *p2;
</code></pre>
</blockquote>
<p>Aber wäre p2 dann nicht ein Zeiger auf eine Referenz? Oder was ist wiederrum mit &quot;no pointers to references&quot; gemeint?</p>
<p>Gruß,<br />
Referenz</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1957066</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1957066</guid><dc:creator><![CDATA[Referenz]]></dc:creator><pubDate>Fri, 24 Sep 2010 20:45:54 GMT</pubDate></item><item><title><![CDATA[Reply to Mehrfachreferenzen on Fri, 24 Sep 2010 20:58:40 GMT]]></title><description><![CDATA[<p>Nein. Beachte, dass der &amp;-Operator verschiedene Bedeutungen hat. Zum einen ist er dazu da, um Referenzen zu kennzeichnen und dann ist das &amp; bei dem Typen und anderseits um die Adresse einer Variable zu holen (wie in dem Beispiel). Dann gibt es noch je nach Umstand andere Bedeutungen (wie z.B das &amp;&amp; für ein logisches UND).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1957072</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1957072</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Fri, 24 Sep 2010 20:58:40 GMT</pubDate></item><item><title><![CDATA[Reply to Mehrfachreferenzen on Fri, 24 Sep 2010 22:39:29 GMT]]></title><description><![CDATA[<p>Hallo.<br />
Hab auch kurz ne Frage zu Referenzen:<br />
Wie kann ich wissen ob das Objekt hinter der Referenz noch lebt? Was passiert wenn das Objekt nicht mehr gültig ist? Welche Exception wird da geworfen?<br />
Danke<br />
lg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1957106</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1957106</guid><dc:creator><![CDATA[Gute Referenzen]]></dc:creator><pubDate>Fri, 24 Sep 2010 22:39:29 GMT</pubDate></item><item><title><![CDATA[Reply to Mehrfachreferenzen on Fri, 24 Sep 2010 22:46:10 GMT]]></title><description><![CDATA[<p>Gute Referenzen schrieb:</p>
<blockquote>
<p>Hallo.<br />
Hab auch kurz ne Frage zu Referenzen:<br />
Wie kann ich wissen ob das Objekt hinter der Referenz noch lebt? Was passiert wenn das Objekt nicht mehr gültig ist? Welche Exception wird da geworfen?<br />
Danke<br />
lg</p>
</blockquote>
<p>Absturz oder sowas passiert dann.<br />
Der Klassiker ist</p>
<pre><code class="language-cpp">int&amp; foo()
{
   int lokal=5;
   return lokal;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1957109</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1957109</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Fri, 24 Sep 2010 22:46:10 GMT</pubDate></item><item><title><![CDATA[Reply to Mehrfachreferenzen on Fri, 24 Sep 2010 22:47:17 GMT]]></title><description><![CDATA[<blockquote>
<p>Wie kann ich wissen ob das Objekt hinter der Referenz noch lebt?</p>
</blockquote>
<p>Indem du korrekten Code schreibst, dann ist das nämlich immer der Fall.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1957110</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1957110</guid><dc:creator><![CDATA[Athar]]></dc:creator><pubDate>Fri, 24 Sep 2010 22:47:17 GMT</pubDate></item><item><title><![CDATA[Reply to Mehrfachreferenzen on Fri, 24 Sep 2010 22:58:51 GMT]]></title><description><![CDATA[<p>Athar schrieb:</p>
<blockquote>
<blockquote>
<p>Wie kann ich wissen ob das Objekt hinter der Referenz noch lebt?</p>
</blockquote>
<p>Indem du korrekten Code schreibst, dann ist das nämlich immer der Fall.</p>
</blockquote>
<p>In der Theorie ja. Aber warum dann groß Referenzen nehmen? Pointer kann ich auf NULL testen, Referenzen nicht.<br />
Beispiel:</p>
<pre><code class="language-cpp">class foo
{
  OtherClass* m_a;

  foo() : m_a(new OtherClass)
  {}

  OtherClass&amp; getA() { return *m_a; }
}
</code></pre>
<p>Wenn das Objekt m_a gelöscht wurde, crasht mir das hier quasi einfach weg? Gibts keine NullReference wie in Java?<br />
lg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1957118</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1957118</guid><dc:creator><![CDATA[Gute Referenzen]]></dc:creator><pubDate>Fri, 24 Sep 2010 22:58:51 GMT</pubDate></item><item><title><![CDATA[Reply to Mehrfachreferenzen on Fri, 24 Sep 2010 23:03:20 GMT]]></title><description><![CDATA[<p>Gute Referenzen schrieb:</p>
<blockquote>
<p>In der Theorie ja. Aber warum dann groß Referenzen nehmen? Pointer kann ich auf NULL testen, Referenzen nicht.</p>
</blockquote>
<p>Es werden ja auch viel zu viele Referenzen statt Pointern genommen. Referenzen sind nötig, um Operatorüberladung und Kopierkostruktoren hinzukriegen.</p>
<p>Gute Referenzen schrieb:</p>
<blockquote>
<p>Wenn das Objekt m_a gelöscht wurde, crasht mir das hier quasi einfach weg? Gibts keine NullReference wie in Java?</p>
</blockquote>
<p>Nee, das ist verboten. Es klappt zwar, aber offiziell klappt es nicht.<br />
Wenn man NULL auch drin braucht, MUSS man Zeiger nehmen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1957122</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1957122</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Fri, 24 Sep 2010 23:03:20 GMT</pubDate></item><item><title><![CDATA[Reply to Mehrfachreferenzen on Sat, 25 Sep 2010 03:19:31 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>Gute Referenzen schrieb:</p>
<blockquote>
<p>In der Theorie ja. Aber warum dann groß Referenzen nehmen? Pointer kann ich auf NULL testen, Referenzen nicht.</p>
</blockquote>
<p>Es werden ja auch viel zu viele Referenzen statt Pointern genommen. Referenzen sind nötig, um Operatorüberladung und Kopierkostruktoren hinzukriegen.</p>
</blockquote>
<p>Was ist an der Referenz hier schlecht/zu viel?</p>
<pre><code class="language-cpp">void foo(Class const&amp; object)
</code></pre>
<p>Damit muss doch nur der Aufrufer sicher stellen, dass er mir ein gültiges Objekt gibt und ich muss nicht in der Funktion (nochmal) auf NULL prüfen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1957145</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1957145</guid><dc:creator><![CDATA[DeepPurple]]></dc:creator><pubDate>Sat, 25 Sep 2010 03:19:31 GMT</pubDate></item><item><title><![CDATA[Reply to Mehrfachreferenzen on Sat, 25 Sep 2010 06:37:10 GMT]]></title><description><![CDATA[<p>Referenz schrieb:</p>
<blockquote>
<p>krümelkacker schrieb:</p>
<blockquote>
<p>Dementsprechend ist</p>
<pre><code class="language-cpp">int &amp; r2 = r;
cout &lt;&lt; r2;
</code></pre>
<p>vergleichbar mit</p>
<pre><code class="language-cpp">int * p2 = &amp;r; // Beachte: &amp;r == &amp;i
cout &lt;&lt; *p2;
</code></pre>
</blockquote>
<p>Aber wäre p2 dann nicht ein Zeiger auf eine Referenz?</p>
</blockquote>
<p>Nein. Wie gesagt, eine Referenz ist wie ein sich automatisch dereferenzierender Zeiger. Daher entspricht der Ausdruck <code>&amp;referenz</code> eher <code>&amp;*zeiger</code> , welches die Adresse des referenzierten Objekts liefert.</p>
<blockquote>
<p>Aber warum dann groß Referenzen nehmen? Pointer kann ich auf NULL testen, Referenzen nicht.</p>
</blockquote>
<p>Referenzen sind praktisch für &quot;pass by reference&quot;. Man kann eine Referenz-auf-const verwenden, wenn die Funktion das Objekt nicht ändern muss. Damit spart man das Kopieren des Objekts; denn mit pass-by-value werden die Objekte kopiert:</p>
<pre><code class="language-cpp">void dings(string s) { cout &lt;&lt; s; }
void bums(string const&amp; cref) { cout &lt;&lt; cref; }

int main()
{
  string hw = &quot;hello world!&quot;;
  dings(hw); // #1
  bums(hw);  // #2
}
</code></pre>
<p>Bei #1 muss für die Funktion eine lokale Kopie des string-Objekts erzeugt werden. Wenn dings ihr s verändert, hat das keinen Einfluss auf das hw Objekt. Das Kopieren kann aber u.U. Zeit/Speicher kosten. dings muss s nicht verändern. Bei #2 wird nur eine Referenz auf das Objekt übergeben. Da das referenzierte Objekt auch const-qualifiziert ist, kann die Funktion bums nicht versehentlich das hw-Objekt verändern. Wir haben uns hier eine unnötige Kopie gespart.</p>
<p>Nicht-Const-Referenzen können auch praktisch sein:</p>
<pre><code class="language-cpp">void swap(int&amp; a, int&amp; b)
{
  int c = a; a = b; b = c;
}

int foo()
{
  int a = 23;
  int b = 42;
  swap(a,b);
  cout &lt;&lt; a &lt;&lt; ' ' &lt;&lt; b;  // gibt 42 23 aus
}
</code></pre>
<p>Klar, mit Zeigern geht das auch:</p>
<pre><code class="language-cpp">void swap(int* a, int* b)
{
  if (!a || !b) throw std::invalid_argument(&quot;ich will keine Nullzeiger!&quot;)
  int c = *a; *a = *b; *b = c;
}

int foo()
{
  int a = 23;
  int b = 42;
  swap(&amp;a,&amp;b);
  cout &lt;&lt; a &lt;&lt; ' ' &lt;&lt; b;  // gibt 42 23 aus
}
</code></pre>
<p>In anderen Fällen sind sie aber notwendig:</p>
<pre><code class="language-cpp">class meine_array_abstraktion
{
  int* start;
  int* ende;
public:
  explicit meine_array_abstraktion(std::size_t anzahl_elemente = 0);
  meine_array_abstraktion(meine_array_abstraktion const&amp;); // #1
  meine_array_abstraktion&amp; operator=(meine_array_abstraktion const&amp;); // #2
  ~meine_array_abstraktion();
  int      &amp; operator[] (std::size_t index)       {return start[index]} // #3
  int const&amp; operator[] (std::size_t index) const {return start[index]}
  std::size_t size() const {return ende-start;}
};
</code></pre>
<p>#1: Der Kopierkonstruktor muss eine Referenz entgegennehmen.<br />
#2: Der Zuweisungsoperator sollte eine Referenz auf <code>*this</code> zurückgeben<br />
#3: Diese Funktion, welche eine Referenz zurückgibt, erlaubt dem Nutzer das Verändern eines Elements mit der natürlichen Syntax:</p>
<pre><code class="language-cpp">meine_array_abstraktion maa = ...;
  maa[0] = 23;
  maa[1] = 42;
  maa[2] = 1729;
</code></pre>
<p>Referenzen, nachdem sie initialisiert wurden, sind unveränderlich -- also, man kann sie nicht dazu bringen, nachträglich etwas anderes zu referenzieren. Durch diese drei Zuweisungen werden die <em>referenzierten Objekte</em> verändert. Das ergibt sich auch wieder aus dem &quot;initialisierte Referenzen verhalten sich wie sich selbst dereferenzierende Zeiger&quot;-Gedanken.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1957155</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1957155</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Sat, 25 Sep 2010 06:37:10 GMT</pubDate></item><item><title><![CDATA[Reply to Mehrfachreferenzen on Sat, 25 Sep 2010 09:59:24 GMT]]></title><description><![CDATA[<p>DeepPurple schrieb:</p>
<blockquote>
<p>Damit muss doch nur der Aufrufer sicher stellen, dass er mir ein gültiges Objekt gibt und ich muss nicht in der Funktion (nochmal) auf NULL prüfen.</p>
</blockquote>
<p>Muß ich auch so nicht. Testet strcpy gegen NULL? Es ist doch offensichtlicher Schwachsinn, NULL zu übergeben. Auch beim folgenden swap-Beispiel. Dagegen muß keiner Testen. Und vor allem nicht mit throw den Fehler anzeigen.<br />
Wer das macht, der frißt auch kleine Kinder und sagt if(&amp;ref!=NULL). krümelkacker hat das jetzt nur mal zur Demo gemacht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1957224</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1957224</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Sat, 25 Sep 2010 09:59:24 GMT</pubDate></item><item><title><![CDATA[Reply to Mehrfachreferenzen on Sat, 25 Sep 2010 10:43:35 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>DeepPurple schrieb:</p>
<blockquote>
<p>Damit muss doch nur der Aufrufer sicher stellen, dass er mir ein gültiges Objekt gibt und ich muss nicht in der Funktion (nochmal) auf NULL prüfen.</p>
</blockquote>
<p>Muß ich auch so nicht. Testet strcpy gegen NULL? Es ist doch offensichtlicher Schwachsinn, NULL zu übergeben. Auch beim folgenden swap-Beispiel. Dagegen muß keiner Testen. Und vor allem nicht mit throw den Fehler anzeigen.<br />
Wer das macht, der frißt auch kleine Kinder und sagt if(&amp;ref!=NULL). krümelkacker hat das jetzt nur mal zur Demo gemacht.</p>
</blockquote>
<p>Und wie beantwortet das jetzt meine Frage?</p>
<p>Was ist an der Referenz hier schlecht/zu viel?</p>
<pre><code class="language-cpp">void foo(Class const&amp; object)
</code></pre>
<p>Oder, was ist hier besser?</p>
<pre><code class="language-cpp">void foo(Class const* object)
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1957242</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1957242</guid><dc:creator><![CDATA[DeepPurple]]></dc:creator><pubDate>Sat, 25 Sep 2010 10:43:35 GMT</pubDate></item><item><title><![CDATA[Reply to Mehrfachreferenzen on Sat, 25 Sep 2010 11:04:41 GMT]]></title><description><![CDATA[<p>Das kommt auf deinen Stil an. Im Wesentlichen gibt es zwei Fraktionen:</p>
<ul>
<li>Manche Leute verwenden Const-Referenzen nur zur Beschleunigung, die Semantik wäre gleich wie bei einer Kopie. Sie würden aber intern keine Zeiger darauf speichern. Wenn das Objekt verändert wird, übergeben sie Zeiger. Referenzen auf nicht-konstante Objekte haben gar keine Verwendung.</li>
<li>Andere benutzen in Parameterlisten Zeiger, wenn <code>NULL</code> ein gültiger Wert ist, und sonst Referenzen. Ich handhabe das z.B. so.</li>
</ul>
]]></description><link>https://www.c-plusplus.net/forum/post/1957254</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1957254</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sat, 25 Sep 2010 11:04:41 GMT</pubDate></item><item><title><![CDATA[Reply to Mehrfachreferenzen on Sat, 25 Sep 2010 12:20:08 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Das kommt auf deinen Stil an. Im Wesentlichen gibt es zwei Fraktionen:</p>
<ul>
<li>Manche Leute verwenden Const-Referenzen nur zur Beschleunigung, die Semantik wäre gleich wie bei einer Kopie. Sie würden aber intern keine Zeiger darauf speichern. Wenn das Objekt verändert wird, übergeben sie Zeiger. Referenzen auf nicht-konstante Objekte haben gar keine Verwendung.</li>
<li>Andere benutzen in Parameterlisten Zeiger, wenn <code>NULL</code> ein gültiger Wert ist, und sonst Referenzen. Ich handhabe das z.B. so.</li>
</ul>
</blockquote>
<p>Das schließt sich doch gar nicht aus. Oder verstehe ich da etwas falsch?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1957278</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1957278</guid><dc:creator><![CDATA[logik]]></dc:creator><pubDate>Sat, 25 Sep 2010 12:20:08 GMT</pubDate></item><item><title><![CDATA[Reply to Mehrfachreferenzen on Sat, 25 Sep 2010 12:36:38 GMT]]></title><description><![CDATA[<p>logik schrieb:</p>
<blockquote>
<p>Das schließt sich doch gar nicht aus.</p>
</blockquote>
<p>Doch. Leider kann man nicht die Vorteile beider Varianten benutzen. Entweder drückt ein Zeiger in der Schnittstelle aus, dass das Objekt verändert wird oder dessen Adresse gespeichert wird (und verunmöglicht gerechtfertigterweise temporäre Objekte), oder er impliziert, dass NULL übergeben werden darf.</p>
<pre><code class="language-cpp">// ---- Fraktion 1 ---------------------------------------------
void Fn(const T&amp; ref)
{
    // Speichere nirgends die Adresse von ref
}

void Fn(T* ptr)
{
    // Verändere *ptr oder speichere dessen Adresse
    // Es ist für den Aufrufer unklar, ob NULL erlaubt ist
}

void Fn(const T* ptr)
{
    // Speichere ptr
    // Es ist für den Aufrufer unklar, ob NULL erlaubt ist
}
</code></pre>
<pre><code class="language-cpp">// ---- Fraktion 2 ---------------------------------------------
void Fn(T&amp; ref)
{
    // Möglicherweise Speicherung von &amp;ref
    // ref kann verändert werden
}

void Fn(const T&amp; ref)
{
    // Möglicherweise Speicherung von &amp;ref
}

void Fn(T* ptr)
{
    // NULL ist sicher ein erlaubter Wert
    // Falls gültiger Zeiger, verändere *ptr oder speichere ptr
}

void Fn(const T* ptr)
{
    // NULL ist sicher ein erlaubter Wert
    // Speichere ptr
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1957282</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1957282</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sat, 25 Sep 2010 12:36:38 GMT</pubDate></item><item><title><![CDATA[Reply to Mehrfachreferenzen on Sat, 25 Sep 2010 13:54:00 GMT]]></title><description><![CDATA[<p>Referenzen auf const zum Vermeiden einer Kopie sind immer ok. (Abgesehen von bestimmten Compileroptimierungen.)<br />
Bei non-const ist der Unterschied da. Zum Glück kommen die selten vor.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1957326</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1957326</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Sat, 25 Sep 2010 13:54:00 GMT</pubDate></item></channel></rss>