<?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[[c++0x] Frage zu R-Value-Referenzen]]></title><description><![CDATA[<p>Hi,<br />
ich hatte ungefähr folgenden Code:</p>
<pre><code class="language-cpp">//Expr : std::string
    std::size_t found = Expr.find(it-&gt;Representation());
    while( found != std::string::npos )
    {
    [...]
        Expr.erase(0,found + it-&gt;Representation().length());
    [...]
    found = Expr.find(it-&gt;Representation());
}
</code></pre>
<p>In kurzen Abständen also drei Aufrufe um die immer gleiche Representation zu bekommen, die sich im ausgelassenen Code aber nicht ändert.<br />
Meine erster Gedanke war eine objektkonstante Referenz zu nutzen, sprich:</p>
<pre><code class="language-cpp">const std::string&amp; Rep = it-&gt;Representation()
</code></pre>
<p>Da ich aber mit gcc 4.5.1 arbeite und eh schon dabei bin so viel wie möglich vom neuen Standard zu nutzen, dachte ich mir, dass man für diesen Fall evtl. R-Value-Referenzen nutzen könnte:</p>
<pre><code class="language-cpp">std::string&amp;&amp; Rep = it-&gt;Representation();
    std::size_t found = Expr.find(Rep);
    while( found != std::string::npos )
    {
    [...]
        Expr.erase(0,found + Rep.length());
    [...]
    found = Expr.find(Rep);
</code></pre>
<p>So lange Situationerklärung, aber kurze Frage: Ist es in Ordnung eine R-Value-Referenz mehrfach zu nutzen, wie in meinem Fall getan oder ist dies riskant, da ein R-Value ja signalisiert, dass der Inhalt gefahrlos &quot;weggenommen&quot; werden kann? Oder würdet ihr für so etwas doch wieder zu objektkonstanten Referenzen greifen?</p>
<p>Gruß Gate</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/274398/c-0x-frage-zu-r-value-referenzen</link><generator>RSS for Node</generator><lastBuildDate>Thu, 27 Aug 2026 14:10:53 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/274398.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 25 Sep 2010 13:31:12 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to [c++0x] Frage zu R-Value-Referenzen on Sat, 25 Sep 2010 13:31:12 GMT]]></title><description><![CDATA[<p>Hi,<br />
ich hatte ungefähr folgenden Code:</p>
<pre><code class="language-cpp">//Expr : std::string
    std::size_t found = Expr.find(it-&gt;Representation());
    while( found != std::string::npos )
    {
    [...]
        Expr.erase(0,found + it-&gt;Representation().length());
    [...]
    found = Expr.find(it-&gt;Representation());
}
</code></pre>
<p>In kurzen Abständen also drei Aufrufe um die immer gleiche Representation zu bekommen, die sich im ausgelassenen Code aber nicht ändert.<br />
Meine erster Gedanke war eine objektkonstante Referenz zu nutzen, sprich:</p>
<pre><code class="language-cpp">const std::string&amp; Rep = it-&gt;Representation()
</code></pre>
<p>Da ich aber mit gcc 4.5.1 arbeite und eh schon dabei bin so viel wie möglich vom neuen Standard zu nutzen, dachte ich mir, dass man für diesen Fall evtl. R-Value-Referenzen nutzen könnte:</p>
<pre><code class="language-cpp">std::string&amp;&amp; Rep = it-&gt;Representation();
    std::size_t found = Expr.find(Rep);
    while( found != std::string::npos )
    {
    [...]
        Expr.erase(0,found + Rep.length());
    [...]
    found = Expr.find(Rep);
</code></pre>
<p>So lange Situationerklärung, aber kurze Frage: Ist es in Ordnung eine R-Value-Referenz mehrfach zu nutzen, wie in meinem Fall getan oder ist dies riskant, da ein R-Value ja signalisiert, dass der Inhalt gefahrlos &quot;weggenommen&quot; werden kann? Oder würdet ihr für so etwas doch wieder zu objektkonstanten Referenzen greifen?</p>
<p>Gruß Gate</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1957314</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1957314</guid><dc:creator><![CDATA[Gate]]></dc:creator><pubDate>Sat, 25 Sep 2010 13:31:12 GMT</pubDate></item><item><title><![CDATA[Reply to [c++0x] Frage zu R-Value-Referenzen on Sat, 25 Sep 2010 13:58:52 GMT]]></title><description><![CDATA[<p>Gate schrieb:</p>
<blockquote>
<pre><code class="language-cpp">std::string&amp;&amp; Rep = it-&gt;Representation();
</code></pre>
</blockquote>
<p>Ich nehme mal an, dass der Rückgabetyp der Funktion std::string ist. In dem Fall macht es keinen Unterschied, ob Du<br />
<code>std::string&amp;&amp; Rep = it-&gt;Representation();</code><br />
oder<br />
<code>std::string Rep = it-&gt;Representation();</code><br />
schreibst. Du kannst das mit der Rvalue-Referenz also gleich bleiben lassen.</p>
<p>In erster Linie sind sie dazu da, effiziente Klassen zu schreiben. std::string wird in C++0x neben dem Copy-Konstruktor einen Move-Konstruktor bekommen, der eine Rvalue-Referenz entgegen nimmt. In &quot;normalem&quot; Benutzercode wird die Rvalue-Referenz wohl weniger auftauchen. Es ist eher ein Werkzeug für Klassen- und Bibliotheks-Autoren.</p>
<p>Gate schrieb:</p>
<blockquote>
<p>So lange Situationerklärung, aber kurze Frage: Ist es in Ordnung eine R-Value-Referenz mehrfach zu nutzen, wie in meinem Fall getan oder ist dies riskant, da ein R-Value ja signalisiert, dass der Inhalt gefahrlos &quot;weggenommen&quot; werden kann?</p>
</blockquote>
<p>Hier hast Du eine <em>benannte</em> Rvalue Referenz. Die Verwendung des Namens in Ausdrücken stellt einen Lvalue-Ausdruck dar:</p>
<pre><code class="language-cpp">void sink(int&amp;);  // #1 akzeptiert nur Lvalues
void sink(int&amp;&amp;); // #2 akzeptiert nur Rvalues

int   prvalue(); // Pure Rvalue  \ beides fasst man unter
int&amp;&amp;  xvalue(); // Xvalue       / Rvalues zusammen
int&amp;   lvalue();

void demo(int&amp;&amp; rref)
{
  sink(prvalue()); // ruft #2 auf
  sink( xvalue()); // ruft #2 auf
  sink( lvalue()); // ruft #1 auf

  int j = 1729
  int&amp; lref = j;
  sink(j);    // ruft #1 auf
  sink(lref); // ruft #1 auf
  sink(rref); // ruft #1 auf &lt;-- !!!
}
</code></pre>
<p>Unbenannte Rvalue-Referenzen sind Xvalues (gehören zu den Rvalue-Ausdrücken).<br />
Benannte Rvalue-Referenzen sind Lvalues.</p>
<p>kk</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1957324</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1957324</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Sat, 25 Sep 2010 13:58:52 GMT</pubDate></item><item><title><![CDATA[Reply to [c++0x] Frage zu R-Value-Referenzen on Sat, 25 Sep 2010 14:12:40 GMT]]></title><description><![CDATA[<p>Vielen Dank für deine wiedermal einleuchtende Antwort. In das Thema werde ich mich noch etwas reinfuchsen müssen.</p>
<p>Gruß Gate</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1957335</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1957335</guid><dc:creator><![CDATA[Gate]]></dc:creator><pubDate>Sat, 25 Sep 2010 14:12:40 GMT</pubDate></item></channel></rss>