<?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[Könnte std::deque::pop_front in C++0x value_type&amp;amp;&amp;amp; zurückgeben?]]></title><description><![CDATA[<p>Hi,</p>
<p><code>std::deque::pop_front</code> gibt ja <code>void</code> zurück, aus <a href="http://bytes.com/topic/c/answers/628362-std-deque-pop_front-pop_back" rel="nofollow">nachvollziehbaren</a> Gründen.</p>
<p>Mit C++0x gibt's aber ja RValue-Referenzen, müsste es dann nicht klappen, dass <code>pop_front</code> einfach <code>T&amp;&amp;</code> zurückgibt, das erste Element halt? Ich stelle mir das etwa so vor:</p>
<pre><code class="language-cpp">class deque {
    ...
    value_type&amp;&amp; pop_front() {
        value_type Object = move( front() );
        erase( begin() );
        return Object;
    }
};
</code></pre>
<p>So dürfte doch in keinem Fall ein Kopierkonstruktor aufgerufen werden, oder irre ich mich? Nur der Destruktor falls das Objekt übernommen wird, den Destruktor kann man in der void-Version aber sowieso nicht vermeiden.</p>
<p>Oder hab ich was übersehen?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/281791/könnte-std-deque-pop_front-in-c-0x-value_type-amp-amp-zurückgeben</link><generator>RSS for Node</generator><lastBuildDate>Sun, 23 Aug 2026 11:27:02 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/281791.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 07 Feb 2011 23:33:58 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Könnte std::deque::pop_front in C++0x value_type&amp;amp;&amp;amp; zurückgeben? on Mon, 07 Feb 2011 23:33:58 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p><code>std::deque::pop_front</code> gibt ja <code>void</code> zurück, aus <a href="http://bytes.com/topic/c/answers/628362-std-deque-pop_front-pop_back" rel="nofollow">nachvollziehbaren</a> Gründen.</p>
<p>Mit C++0x gibt's aber ja RValue-Referenzen, müsste es dann nicht klappen, dass <code>pop_front</code> einfach <code>T&amp;&amp;</code> zurückgibt, das erste Element halt? Ich stelle mir das etwa so vor:</p>
<pre><code class="language-cpp">class deque {
    ...
    value_type&amp;&amp; pop_front() {
        value_type Object = move( front() );
        erase( begin() );
        return Object;
    }
};
</code></pre>
<p>So dürfte doch in keinem Fall ein Kopierkonstruktor aufgerufen werden, oder irre ich mich? Nur der Destruktor falls das Objekt übernommen wird, den Destruktor kann man in der void-Version aber sowieso nicht vermeiden.</p>
<p>Oder hab ich was übersehen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2018040</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2018040</guid><dc:creator><![CDATA[fdfdg]]></dc:creator><pubDate>Mon, 07 Feb 2011 23:33:58 GMT</pubDate></item><item><title><![CDATA[Reply to Könnte std::deque::pop_front in C++0x value_type&amp;amp;&amp;amp; zurückgeben? on Tue, 08 Feb 2011 00:19:47 GMT]]></title><description><![CDATA[<p>Was ist, wenn <code>T</code> nicht movable ist? Würde dann nicht eine Kopie erstellt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2018048</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2018048</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Tue, 08 Feb 2011 00:19:47 GMT</pubDate></item><item><title><![CDATA[Reply to Könnte std::deque::pop_front in C++0x value_type&amp;amp;&amp;amp; zurückgeben? on Tue, 08 Feb 2011 00:32:33 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Was ist, wenn <code>T</code> nicht movable ist? Würde dann nicht eine Kopie erstellt?</p>
</blockquote>
<p>Oha, da ist der Haken. Danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2018051</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2018051</guid><dc:creator><![CDATA[fdfdg]]></dc:creator><pubDate>Tue, 08 Feb 2011 00:32:33 GMT</pubDate></item><item><title><![CDATA[Reply to Könnte std::deque::pop_front in C++0x value_type&amp;amp;&amp;amp; zurückgeben? on Tue, 08 Feb 2011 02:16:53 GMT]]></title><description><![CDATA[<p>Er.</p>
<p>Mag sein dass ich da was verpennt habe bezüglich Rvalue-Referenzen... aber: seit wann ist es OK eine Referenz (Rvalue oder nicht) auf eine lokale Variable zurückzuliefern?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2018060</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2018060</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Tue, 08 Feb 2011 02:16:53 GMT</pubDate></item><item><title><![CDATA[Reply to Könnte std::deque::pop_front in C++0x value_type&amp;amp;&amp;amp; zurückgeben? on Tue, 08 Feb 2011 10:56:47 GMT]]></title><description><![CDATA[<blockquote>
<p>Er.</p>
<p>Mag sein dass ich da was verpennt habe bezüglich Rvalue-Referenzen... aber: seit wann ist es OK eine Referenz (Rvalue oder nicht) auf eine lokale Variable zurückzuliefern?</p>
</blockquote>
<p>Ich habe diesbezüglich vor kurzem ein interessantes Video auf Channel 9 mit &quot;Mister S.T.L&quot; gesehen(Link füge ich später noch hinzu). Offenbar unterlief selbst dem Standardkomitee in einem der Proposals genau derselbe Fehler. Und nein, man sollte keine (RValue-)Referenzen auf lokale Variablen zurückgeben... Niemals! <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="😉"
    /></p>
<p>Edit: So hier der Link<br />
<a href="http://channel9.msdn.com/Shows/Going+Deep/C9-Lectures-Stephan-T-Lavavej-Standard-Template-Library-STL-9-of-n" rel="nofollow">http://channel9.msdn.com/Shows/Going+Deep/C9-Lectures-Stephan-T-Lavavej-Standard-Template-Library-STL-9-of-n</a><br />
Ab Minute 31 wird auf das Problem eingegangen.<br />
Im übrigen kann ich diese Videolektüre(10 Stück sind es an der Zahl) nur jedem empfehlen, der sich mit der STL auseinandersetzen will/muss.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2018090</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2018090</guid><dc:creator><![CDATA[Matzer]]></dc:creator><pubDate>Tue, 08 Feb 2011 10:56:47 GMT</pubDate></item><item><title><![CDATA[Reply to Könnte std::deque::pop_front in C++0x value_type&amp;amp;&amp;amp; zurückgeben? on Tue, 08 Feb 2011 10:28:07 GMT]]></title><description><![CDATA[<p>Stimmt, da hat mich krümelkacker letztes Mal drauf hingewiesen. Richtig wäre glaube ich</p>
<pre><code class="language-cpp">value_type pop_front();
</code></pre>
<p>und der Move-Konstruktor wird falls vorhanden automatisch aufgerufen.</p>
<p>Wenn du ein <code>pop_front()</code> willst, das das Element zurückgibt (und für movable Typen exceptionsicher ist), sollte das eigentlich als freie Funktion machbar sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2018156</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2018156</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Tue, 08 Feb 2011 10:28:07 GMT</pubDate></item><item><title><![CDATA[Reply to Könnte std::deque::pop_front in C++0x value_type&amp;amp;&amp;amp; zurückgeben? on Tue, 08 Feb 2011 22:34:40 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/23058">@Matzer</a>: Danke für den Link. Sehe mir das gerade an (bzw. versuche es, viel mehr als &quot;buffering&quot; kommt da gerade nicht <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>Matzer schrieb:</p>
<blockquote>
<p>&quot;Mister S.T.L&quot;</p>
</blockquote>
<p>Das ist für mich immer noch P.J.Plauger, obwohl bei ihm die Initialen nicht passen <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="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2018518</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2018518</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Tue, 08 Feb 2011 22:34:40 GMT</pubDate></item><item><title><![CDATA[Reply to Könnte std::deque::pop_front in C++0x value_type&amp;amp;&amp;amp; zurückgeben? on Tue, 08 Feb 2011 23:12:38 GMT]]></title><description><![CDATA[<p>Mal ne Blöde Frage bezüglich den Rvalue references:</p>
<p>Angenommen std::string hat einen Move-Ctor:</p>
<pre><code class="language-cpp">struct fooyou
{
  int bar1;
  std::string bar2;

  fooyou() : bar1(0), bar2()
  { }

  fooyou(int bar) : bar1(bar), bar2(&quot;bar entered&quot;)
  { }
};

fooyou test = fooyou(123);
</code></pre>
<p>Wird hier der String kopiert oder verschoben?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2018530</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2018530</guid><dc:creator><![CDATA[Ethon]]></dc:creator><pubDate>Tue, 08 Feb 2011 23:12:38 GMT</pubDate></item><item><title><![CDATA[Reply to Könnte std::deque::pop_front in C++0x value_type&amp;amp;&amp;amp; zurückgeben? on Tue, 08 Feb 2011 23:14:05 GMT]]></title><description><![CDATA[<p>Wir wissen doch alle, dass das für STephanov&amp;Lee steht. <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="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2018531</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2018531</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Tue, 08 Feb 2011 23:14:05 GMT</pubDate></item><item><title><![CDATA[Reply to Könnte std::deque::pop_front in C++0x value_type&amp;amp;&amp;amp; zurückgeben? on Wed, 09 Feb 2011 10:41:38 GMT]]></title><description><![CDATA[<p>Ethon schrieb:</p>
<blockquote>
<p>Angenommen std::string hat einen Move-Ctor:</p>
<pre><code class="language-cpp">struct fooyou
{
  int bar1;
  std::string bar2;

  fooyou() : bar1(0), bar2()
  { }

  fooyou(int bar) : bar1(bar), bar2(&quot;bar entered&quot;)
  { }
};

fooyou test = fooyou(123);
</code></pre>
<p>Wird hier der String kopiert oder verschoben?</p>
</blockquote>
<p>Wo genau ist &quot;hier&quot;? Ich nehme an, Du meinst damit die letzte Zeile mit der Kopierinitialisierung. Nun, weil auf der rechten Seite ein Rvalue-Ausdruck steht, darf der Compiler versuchen, die &quot;Kopie&quot; komplett wegzuoptimieren. Das heißt, ein gescheiter Compiler wird mit oder ohne Rvalue-Referenzen nur ein einziges Objekt vom Typ fooyou erzeugen, ohne dass irgendwas kopiert werden muss. Erwähnenswerte Änderungen in C++0x sind:</p>
<ul>
<li>Überall dort, wo der C++03 Standard dem Compiler das Wegoptimieren von Kopien explizit erlaubt (&quot;copy elision&quot;, siehe 12.8/15 [class.copy]) es aber aber aus irgendwelchen Gründen nicht tun kann, zwingt der kommende C++ Standard den Compiler, einen Move-Konstruktor zu benutzen (falls vorhanden).</li>
<li>Falls der Benutzer keinen Dtor, Copy-Ctor oder Copy-Assignment einer Klasse deklariert und falls die Datenelemente einer Klasse &quot;move-bar&quot; sind, erzeugt der Compiler entsprechende Move-Operationen automatisch.</li>
</ul>
<p>In diesem konkreten Fall ist fooyou aufgrund der vom Compiler erzeugbaren Move-Operationen move-konstruierbar und move-zuweisbar. Also, entweder wird der Compiler direkt nur ein fooyou-Objekt erzeugen (falls er die &quot;copy elision&quot; durchführen kann) oder er wird seinen implizit generierten Move-Ctor für fooyou bemühen, welcher alle Datenelemente &quot;movt&quot;. Es wird hier also garantiert kein String-Objekt kopiert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2018545</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2018545</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Wed, 09 Feb 2011 10:41:38 GMT</pubDate></item></channel></rss>