<?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[Nutzung von Referenzen übertrieben?]]></title><description><![CDATA[<pre><code class="language-cpp">const std::wstring &amp;name() const;
</code></pre>
<p>ist das sinnvoll oder ist es bereits übertrieben?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/195316/nutzung-von-referenzen-übertrieben</link><generator>RSS for Node</generator><lastBuildDate>Tue, 29 Sep 2026 22:40:54 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/195316.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 16 Oct 2007 13:31:27 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Nutzung von Referenzen übertrieben? on Tue, 16 Oct 2007 13:31:27 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">const std::wstring &amp;name() const;
</code></pre>
<p>ist das sinnvoll oder ist es bereits übertrieben?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1386404</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1386404</guid><dc:creator><![CDATA[master_bertie]]></dc:creator><pubDate>Tue, 16 Oct 2007 13:31:27 GMT</pubDate></item><item><title><![CDATA[Reply to Nutzung von Referenzen übertrieben? on Tue, 16 Oct 2007 13:36:01 GMT]]></title><description><![CDATA[<p>Das ist sinnvoll - und durchaus praktikabel (zumindest solange der zurückgelieferte Wert das Ende der Funktion überlebt - also gib bitte keine lokale Variable aus dieser Funktion zurück).</p>
<p>Gegenüber der Alternative - 'std::wstring name() const;' - hat das den Vorteil, daß eine Kopie wegfällt, was je nach Inhalt einige Zeit in Anspruch nehmen könnte.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1386408</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1386408</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Tue, 16 Oct 2007 13:36:01 GMT</pubDate></item><item><title><![CDATA[Reply to Nutzung von Referenzen übertrieben? on Tue, 16 Oct 2007 13:37:23 GMT]]></title><description><![CDATA[<p>okay danke. es handelt sich um eine methode in einer klasse...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1386409</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1386409</guid><dc:creator><![CDATA[master_bertie]]></dc:creator><pubDate>Tue, 16 Oct 2007 13:37:23 GMT</pubDate></item><item><title><![CDATA[Reply to Nutzung von Referenzen übertrieben? on Tue, 16 Oct 2007 13:38:31 GMT]]></title><description><![CDATA[<p>nicht übertrieben für zusammengesetzte typen. nur für fundamentale typen isses schwachsinn. z.b.</p>
<pre><code class="language-cpp">const int&amp; getValue() const;
</code></pre>
<p>besser:</p>
<pre><code class="language-cpp">int getValue() const;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1386411</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1386411</guid><dc:creator><![CDATA[blbalbalbal!!]]></dc:creator><pubDate>Tue, 16 Oct 2007 13:38:31 GMT</pubDate></item><item><title><![CDATA[Reply to Nutzung von Referenzen übertrieben? on Tue, 16 Oct 2007 13:54:33 GMT]]></title><description><![CDATA[<p>master_bertie schrieb:</p>
<blockquote>
<p>okay danke. es handelt sich um eine methode in einer klasse...</p>
</blockquote>
<p>Das habe ich mir schon gedacht <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="😉"
    /> (das letzte 'const' kann so nur innerhalb einer Klasse vorkommen)<br />
Wichtig für die Anwendbarkeit ist aber nicht, wo die Funktion steht, sondern woher sie ihren Rückgabewert bekommt:</p>
<pre><code class="language-cpp">class test
{
  string m_name;
public:
  //so klappt_s problemlos - das übergebene Objekt lebt außerhalb der Funktion
  const string&amp; name1() const
  {
    return m_name;
  }

  //das fliegt dir vermutlich um die Ohren (Referenz auf temporäre Variable)
  const string&amp; name2() const
  {
    return &quot;Mein Name ist &quot; + m_name;
  }
};
</code></pre>
<p>blbalbalbal!! schrieb:</p>
<blockquote>
<p>nicht übertrieben für zusammengesetzte typen. nur für fundamentale typen isses schwachsinn. z.b.</p>
</blockquote>
<p>Unnötig vielleicht (bei einem int nimmt die Referenz auch nicht mehr Platz/Aufwand ein als der Wert selber), aber bestimmt kein Schwachsinn.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1386428</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1386428</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Tue, 16 Oct 2007 13:54:33 GMT</pubDate></item><item><title><![CDATA[Reply to Nutzung von Referenzen übertrieben? on Tue, 16 Oct 2007 14:46:45 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p>...</p>
<pre><code class="language-cpp">//das fliegt dir vermutlich um die Ohren (Referenz auf temporäre Variable)
  const string&amp; name2() const
  {
    return &quot;Mein Name ist &quot; + m_name;
  }
};
</code></pre>
<p>....</p>
</blockquote>
<p>Hatte ich hier nicht mal gelesen, dass der Standard das &quot;Überleben von temporären Objekten für const&amp;-Rückgabewerte&quot; garantiert ? (wohl gemerkt: NUR für const-Refs, nicht für nonconst-Refs !!) .... muss mal suchen.<br />
Hatte mich damals überrascht, aber irgendsowas habe ich in Erinnerung.</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1386473</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1386473</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Tue, 16 Oct 2007 14:46:45 GMT</pubDate></item><item><title><![CDATA[Reply to Nutzung von Referenzen übertrieben? on Tue, 16 Oct 2007 14:47:22 GMT]]></title><description><![CDATA[<p>Ja, irgendwas davon ist mir auch noch im Hinterkopf - aber ich habe leider keine Ahnung, wie lange die Referenz überleben kann (und wie weit moderne Compiler das umgesetzt haben), also würde ich mich lieber nicht darauf verlassen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1386474</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1386474</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Tue, 16 Oct 2007 14:47:22 GMT</pubDate></item><item><title><![CDATA[Reply to Nutzung von Referenzen übertrieben? on Tue, 16 Oct 2007 15:09:49 GMT]]></title><description><![CDATA[<p>Simon2 schrieb:</p>
<blockquote>
<p>Hatte ich hier nicht mal gelesen, dass der Standard das &quot;Überleben von temporären Objekten für const&amp;-Rückgabewerte&quot; garantiert ? (wohl gemerkt: NUR für const-Refs, nicht für nonconst-Refs !!) .... muss mal suchen.<br />
Hatte mich damals überrascht, aber irgendsowas habe ich in Erinnerung.</p>
</blockquote>
<blockquote>
<p>12.2<br />
...<br />
5 ...<br />
A temporary bound to the returned value in a function return statement (6.6.3) persists until the function exits.</p>
</blockquote>
<p>const oder nicht-const spielt hier keine Rolle. Die Initialisierung einer Referenz auf const kann die die Erstellung eines temporären Objektes bewirken (in diesem Falle wird das temporäre Objekt durch die Addition verursacht, aber der Grund ist ohnehin egal), die Referenz wird dann an dieses temporäre Objekt gebunden. Dann wird die Lebenszeit dieses temporären Objektes aber immer noch durch obige Regel auf die Dauer der Ausführung der Funktion (das Objekt wird unmittelbar vor der Zerstörung automatischer Variablen dieser Funktion zerstört) begrenzt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1386488</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1386488</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Tue, 16 Oct 2007 15:09:49 GMT</pubDate></item><item><title><![CDATA[Reply to Nutzung von Referenzen übertrieben? on Tue, 16 Oct 2007 15:07:30 GMT]]></title><description><![CDATA[<p>Simon2 schrieb:</p>
<blockquote>
<p>Hatte ich hier nicht mal gelesen, dass der Standard das &quot;Überleben von temporären Objekten für const&amp;-Rückgabewerte&quot; garantiert ? (wohl gemerkt: NUR für const-Refs, nicht für nonconst-Refs !!) .... muss mal suchen.<br />
Hatte mich damals überrascht, aber irgendsowas habe ich in Erinnerung.</p>
</blockquote>
<p>War das nicht für temp. Objekte bei der Übergabe per Referenz?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1386489</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1386489</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Tue, 16 Oct 2007 15:07:30 GMT</pubDate></item><item><title><![CDATA[Reply to Nutzung von Referenzen übertrieben? on Tue, 16 Oct 2007 15:28:09 GMT]]></title><description><![CDATA[<p>camper schrieb:</p>
<blockquote>
<blockquote>
<p>12.2<br />
...<br />
5 ...<br />
A temporary bound to the returned value in a function return statement (6.6.3) persists until the function exits.</p>
</blockquote>
<p>....</p>
</blockquote>
<p>LordJaxom schrieb:</p>
<blockquote>
<p>...War das nicht für temp. Objekte bei der Übergabe per Referenz?</p>
</blockquote>
<p>Ah !<br />
Dann geht es eher um sowas oder ?</p>
<pre><code class="language-cpp">void f(string const&amp; s);

int main() {
   f(&quot;Simon2&quot;); // temporary wird erzeugt und lebt, bis f() verlassen wird
</code></pre>
<p>Evtl. noch für Defaultparameter ? ....</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1386501</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1386501</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Tue, 16 Oct 2007 15:28:09 GMT</pubDate></item><item><title><![CDATA[Reply to Nutzung von Referenzen übertrieben? on Tue, 16 Oct 2007 16:02:36 GMT]]></title><description><![CDATA[<p>Simon2 schrieb:</p>
<blockquote>
<pre><code class="language-cpp">f(&quot;Simon2&quot;); // temporary wird erzeugt und lebt, bis f() verlassen wird
</code></pre>
</blockquote>
<p>Tatsächlich lebt das temporäre Objekt bis zum Ende der Auswertung des gesamten Ausdrucks, der den Funktionsaufruf enthält, nicht nur bis zum Ende des Funktionsaufrufs. Deshalb ist zum Beispiel folgendes möglich:</p>
<pre><code class="language-cpp">const string&amp; foo(const string&amp; s) { return s; /* s ist kein temporäres Objekt */ }
int main()
{
    cout &lt;&lt; foo( &quot;bar&quot; );
// aber nicht:
    const string&amp; s = foo( &quot;boom&quot; );
    cout &lt;&lt; s; // undefiniert. s verweist nicht auf ein lebendes Objekt.
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1386545</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1386545</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Tue, 16 Oct 2007 16:02:36 GMT</pubDate></item><item><title><![CDATA[Reply to Nutzung von Referenzen übertrieben? on Tue, 16 Oct 2007 19:47:40 GMT]]></title><description><![CDATA[<p>camper schrieb:</p>
<blockquote>
<p>const string&amp; s = foo( &quot;boom&quot; );<br />
cout &lt;&lt; s; // undefiniert. s verweist nicht auf ein lebendes Objekt.<br />
}[/cpp]</p>
</blockquote>
<p>Ganz korrekt würde das letzte Kommentar dann doch so aussehen müssen: &quot;undefiniert. s verweist nicht MEHR auf ein lebendes Objekt&quot;.</p>
<p>camper schrieb:</p>
<blockquote>
<p>Tatsächlich lebt das temporäre Objekt bis zum Ende der Auswertung des gesamten Ausdrucks, der den Funktionsaufruf enthält</p>
</blockquote>
<p>D.h. ja das s kurzzeitig auf &quot;boom&quot; verweisen würde. Richtig ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1386702</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1386702</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Tue, 16 Oct 2007 19:47:40 GMT</pubDate></item><item><title><![CDATA[Reply to Nutzung von Referenzen übertrieben? on Tue, 16 Oct 2007 20:17:38 GMT]]></title><description><![CDATA[<p>KasF schrieb:</p>
<blockquote>
<p>Ganz korrekt würde das letzte Kommentar dann doch so aussehen müssen: &quot;undefiniert. s verweist nicht MEHR auf ein lebendes Objekt&quot;.</p>
</blockquote>
<p>„Nicht mehr“ impliziert „nicht“ ;).</p>
<p>KasF schrieb:</p>
<blockquote>
<p>camper schrieb:</p>
<blockquote>
<p>Tatsächlich lebt das temporäre Objekt bis zum Ende der Auswertung des gesamten Ausdrucks, der den Funktionsaufruf enthält</p>
</blockquote>
<p>D.h. ja das s kurzzeitig auf &quot;boom&quot; verweisen würde. Richtig ?</p>
</blockquote>
<p>Nein. Höchstens auf ein std::string(&quot;boom&quot;). Und darauf auch nur bei seiner Initialisierung, danach ist dieses temporäre Objekt tot.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1386711</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1386711</guid><dc:creator><![CDATA[.filmor]]></dc:creator><pubDate>Tue, 16 Oct 2007 20:17:38 GMT</pubDate></item></channel></rss>