<?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++11 Frage]]></title><description><![CDATA[<p>Was ist der Unterschied zwischen diesen beiden Funktionen?</p>
<pre><code class="language-cpp">void func1( int&amp;&amp; ); // #1
void func2( int&amp; );  // #2
</code></pre>
<p>Vorallem beim ersten bin ich mir nicht im Klaren, was dies genau bedeutet.<br />
Das zweite sollte klar sein <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f60b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_savoring_food"
      title=":yum:"
      alt="😋"
    /></p>
<p>MfG</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/307228/c-11-frage</link><generator>RSS for Node</generator><lastBuildDate>Thu, 06 Aug 2026 20:49:57 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/307228.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 20 Aug 2012 14:12:08 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to C++11 Frage on Mon, 20 Aug 2012 14:12:59 GMT]]></title><description><![CDATA[<p>Was ist der Unterschied zwischen diesen beiden Funktionen?</p>
<pre><code class="language-cpp">void func1( int&amp;&amp; ); // #1
void func2( int&amp; );  // #2
</code></pre>
<p>Vorallem beim ersten bin ich mir nicht im Klaren, was dies genau bedeutet.<br />
Das zweite sollte klar sein <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f60b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_savoring_food"
      title=":yum:"
      alt="😋"
    /></p>
<p>MfG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2243719</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2243719</guid><dc:creator><![CDATA[yihaaa]]></dc:creator><pubDate>Mon, 20 Aug 2012 14:12:59 GMT</pubDate></item><item><title><![CDATA[Reply to C++11 Frage on Mon, 20 Aug 2012 14:17:04 GMT]]></title><description><![CDATA[<p>beim ersten übergibst du eine rvalue-Reference<br />
<a href="http://en.cppreference.com/w/cpp/language/value_category" rel="nofollow">cppreference.com</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2243724</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2243724</guid><dc:creator><![CDATA[Cyres]]></dc:creator><pubDate>Mon, 20 Aug 2012 14:17:04 GMT</pubDate></item><item><title><![CDATA[Reply to C++11 Frage on Mon, 20 Aug 2012 14:49:34 GMT]]></title><description><![CDATA[<p>Danke. Aber der Link hilft mir nicht so richtig. Ich kann mir das nicht vorstellen, was da genau passiert und wozu man das eig. braucht. Ich weiß das ein r- und lvalue ist und ich weiß was eine Referenz ist, aber so richtig hilfts mir nicht. Könntest du vielleicht mal ein Beispiel machen, da dem es klar werden sollte?</p>
<p>MfG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2243741</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2243741</guid><dc:creator><![CDATA[yihaaa]]></dc:creator><pubDate>Mon, 20 Aug 2012 14:49:34 GMT</pubDate></item><item><title><![CDATA[Reply to C++11 Frage on Mon, 20 Aug 2012 14:54:36 GMT]]></title><description><![CDATA[<p>Die Begriffe sind eigentlich selbsterklärend: &amp;&amp; ist eine Referenz auf ein rvalue, also in etwa</p>
<pre><code class="language-cpp">Foo&amp;&amp; i = Foo(10);
Foo j = i;
</code></pre>
<p>Der Default-Konstruktor von Foo wird in der ersten Zeile aufgerufen, der Move-Konstruktor in der zweiten Zeile.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2243744</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2243744</guid><dc:creator><![CDATA[Cyres]]></dc:creator><pubDate>Mon, 20 Aug 2012 14:54:36 GMT</pubDate></item><item><title><![CDATA[Reply to C++11 Frage on Mon, 20 Aug 2012 15:17:31 GMT]]></title><description><![CDATA[<p>Ja und was ist ja jetz der große Vorteil, eine normale Referenz tuts doch hier auch? Oder übersehe ich da übelst was?</p>
<p>MfG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2243756</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2243756</guid><dc:creator><![CDATA[yihaaa]]></dc:creator><pubDate>Mon, 20 Aug 2012 15:17:31 GMT</pubDate></item><item><title><![CDATA[Reply to C++11 Frage on Mon, 20 Aug 2012 15:30:09 GMT]]></title><description><![CDATA[<p><a href="http://www.artima.com/cppsource/rvalue.html" rel="nofollow">http://www.artima.com/cppsource/rvalue.html</a><br />
<a href="http://www.cprogramming.com/c++11/rvalue-references-and-move-semantics-in-c++11.html" rel="nofollow">http://www.cprogramming.com/c++11/rvalue-references-and-move-semantics-in-c++11.html</a></p>
<p>Es ist eine Art Optimierung, die laestiges Kopieren verringern soll und jetzt von der Sprache direkt unterstuetzt wird. An deinen zwei Funktionssignaturen wirst du das nicht verstehen koennen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2243764</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2243764</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Mon, 20 Aug 2012 15:30:09 GMT</pubDate></item><item><title><![CDATA[Reply to C++11 Frage on Mon, 20 Aug 2012 16:53:07 GMT]]></title><description><![CDATA[<p>Gut, jetz wird das schon etwas klarer.</p>
<pre><code class="language-cpp">int&amp;&amp; i = getInt( );
</code></pre>
<p>Ist also eine Referenz auf das Return Value des Calls. Es wird nichts kopiert.<br />
Aber wie merkt er sich das?</p>
<p>MfG</p>
<p>BTW: Wäre es nicht das selbe wie das hier?</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

int* get( )
{
	return new int( 19 );
}

int main( int argc, char* argv[ ] )
{
int i = *get( );
return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2243772</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2243772</guid><dc:creator><![CDATA[yihaaa]]></dc:creator><pubDate>Mon, 20 Aug 2012 16:53:07 GMT</pubDate></item><item><title><![CDATA[Reply to C++11 Frage on Mon, 20 Aug 2012 17:06:28 GMT]]></title><description><![CDATA[<p>yihaaa schrieb:</p>
<blockquote>
<p>BTW: Wäre es nicht das selbe wie das hier?</p>
</blockquote>
<p>Nein. Bei deinem Beispiel wird der in <code>get()</code> am Heap angeforderte <code>int</code> nach <code>i</code> kopiert und bleibt seinerseits als Speicherlöchli übrig.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2243790</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2243790</guid><dc:creator><![CDATA[Swordfish]]></dc:creator><pubDate>Mon, 20 Aug 2012 17:06:28 GMT</pubDate></item><item><title><![CDATA[Reply to C++11 Frage on Mon, 20 Aug 2012 17:27:45 GMT]]></title><description><![CDATA[<p>Ja gut, man müsste es eben noch löschen.</p>
<p>MfG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2243798</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2243798</guid><dc:creator><![CDATA[yihaaa]]></dc:creator><pubDate>Mon, 20 Aug 2012 17:27:45 GMT</pubDate></item><item><title><![CDATA[Reply to C++11 Frage on Mon, 20 Aug 2012 17:32:01 GMT]]></title><description><![CDATA[<p>Auch dann würd' kopiert!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2243802</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2243802</guid><dc:creator><![CDATA[Swordfish]]></dc:creator><pubDate>Mon, 20 Aug 2012 17:32:01 GMT</pubDate></item><item><title><![CDATA[Reply to C++11 Frage on Mon, 20 Aug 2012 20:03:24 GMT]]></title><description><![CDATA[<p>Cyres schrieb:</p>
<blockquote>
<p>Die Begriffe sind eigentlich selbsterklärend: &amp;&amp; ist eine Referenz auf ein rvalue, also in etwa</p>
<pre><code class="language-cpp">Foo&amp;&amp; i = Foo(10);
Foo j = i;
</code></pre>
<p>Der Default-Konstruktor von Foo wird in der ersten Zeile aufgerufen, der Move-Konstruktor in der zweiten Zeile.</p>
</blockquote>
<p>Ich hab es zwar nicht getestet, aber da i einen Namen hat, wird denke ich der normale Copy-Contruktor aufgerufen...</p>
<p>Zudem meine ich mich zu erinnern, dass man einen Rückgabewert (hier halt der Konstruktor) nicht als rvalue-Referenz speichert.</p>
<p>Du möchtest wohl eher etwas wie:</p>
<pre><code class="language-cpp">Foo i(10);
Foo j = std::nove(i);
</code></pre>
<p>Gruß,<br />
XSpille</p>
<p>Wenn ich völlig falsche liege, korrigiert mich bitte...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2243847</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2243847</guid><dc:creator><![CDATA[XSpille]]></dc:creator><pubDate>Mon, 20 Aug 2012 20:03:24 GMT</pubDate></item><item><title><![CDATA[Reply to C++11 Frage on Mon, 20 Aug 2012 20:04:14 GMT]]></title><description><![CDATA[<p>Benannte RValue Referenzen sind LValues.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2243849</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2243849</guid><dc:creator><![CDATA[Kellerautomat]]></dc:creator><pubDate>Mon, 20 Aug 2012 20:04:14 GMT</pubDate></item><item><title><![CDATA[Reply to C++11 Frage on Mon, 20 Aug 2012 20:17:57 GMT]]></title><description><![CDATA[<p>Hier der 'Beweis' (ohne Optimierungen kompilieren!):</p>
<pre><code class="language-cpp">#include &lt;string&gt;
#include &lt;iostream&gt;

struct Foo{
	Foo(int v) : i(new int(v)){
	}

	Foo(Foo&amp;&amp; foo) : i(foo.i) {
		foo.i = 0;
		std::cout &lt;&lt; &quot;move&quot; &lt;&lt; std::endl;
	}
	Foo(const Foo&amp; foo) : i(new int(*foo.i)) {
		std::cout &lt;&lt; &quot;copy&quot; &lt;&lt; std::endl;
	}
	~Foo(){
		delete i;
	}
	int* i;
};

int main(){
	Foo&amp;&amp; i = Foo(10); // &lt;-- Hier
	Foo j = i;
	Foo i2 = Foo(10); 
	Foo j2 = std::move(i2);
}
</code></pre>
<blockquote>
<p>copy<br />
move</p>
</blockquote>
<p>Wie Kellerautomat gemeint hat: sobald er einen Namen hat, ist es wieder ein lvalue...</p>
<p>Aber vielleicht bestätigt mir noch jemand, dass man die markierte Zeile ebenfalls nicht so verwenden sollte...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2243856</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2243856</guid><dc:creator><![CDATA[XSpille]]></dc:creator><pubDate>Mon, 20 Aug 2012 20:17:57 GMT</pubDate></item><item><title><![CDATA[Reply to C++11 Frage on Mon, 20 Aug 2012 20:25:37 GMT]]></title><description><![CDATA[<p>Die Zeile ist zwar nicht besonders sinnvoll, aber auch nicht falsch.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2243857</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2243857</guid><dc:creator><![CDATA[Kellerautomat]]></dc:creator><pubDate>Mon, 20 Aug 2012 20:25:37 GMT</pubDate></item><item><title><![CDATA[Reply to C++11 Frage on Mon, 20 Aug 2012 20:26:27 GMT]]></title><description><![CDATA[<p>Also ich hätte z.B. erwartet, dass dieser Code crashed:</p>
<pre><code class="language-cpp">void fill_stack(int i){
	if(i&lt;1000){
		std::cout &lt;&lt; i &lt;&lt;std::endl;
		fill_stack(++i);
	}
}

Foo f(){
	return Foo(10);
}

int main(){
	Foo&amp;&amp; i = f();
	std::cout &lt;&lt; *i.i &lt;&lt; std::endl;
	fill_stack(0);
	Foo j = i;
	std::cout &lt;&lt; *j.i &lt;&lt; std::endl;
}
</code></pre>
<p>Also Foo(10) liegt auf dem Stack und danach wird der Stack durch den Funktionsaufruf überschrieben...<br />
Und eine rvalue-Referenz, ist ja auch nur eine Referenz...</p>
<p>Ich vermute es liegt nur an 'Optimierungen' des Compilers?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2243858</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2243858</guid><dc:creator><![CDATA[XSpille]]></dc:creator><pubDate>Mon, 20 Aug 2012 20:26:27 GMT</pubDate></item><item><title><![CDATA[Reply to C++11 Frage on Mon, 20 Aug 2012 20:29:31 GMT]]></title><description><![CDATA[<p>So funktionieren RValue Referenzen aber nicht. Die Lebenszeit des temporaeren Objektes wird bis zum Scopeende verlaengert, genau wie wenn du eine LValue Referenz auf const verwendet haettest.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2243859</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2243859</guid><dc:creator><![CDATA[Kellerautomat]]></dc:creator><pubDate>Mon, 20 Aug 2012 20:29:31 GMT</pubDate></item><item><title><![CDATA[Reply to C++11 Frage on Mon, 20 Aug 2012 20:40:25 GMT]]></title><description><![CDATA[<p>Kellerautomat schrieb:</p>
<blockquote>
<p>So funktionieren RValue Referenzen aber nicht. Die Lebenszeit des temporaeren Objektes wird bis zum Scopeende verlaengert, genau wie wenn du eine LValue Referenz auf const verwendet haettest.</p>
</blockquote>
<p>Stimmt... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f4a1.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--light_bulb"
      title=":bulb:"
      alt="💡"
    /> Hab ich auch schonmal gehört!!! THX <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>
]]></description><link>https://www.c-plusplus.net/forum/post/2243863</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2243863</guid><dc:creator><![CDATA[XSpille]]></dc:creator><pubDate>Mon, 20 Aug 2012 20:40:25 GMT</pubDate></item><item><title><![CDATA[Reply to C++11 Frage on Mon, 20 Aug 2012 23:41:10 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/28665">@yihaaa</a> Mit Basistypen machen Rvalue-Referenzen ja auch wenig Sinn. (Zumindest fällt mir da keine Anwendung ein.) Aber die übergibst du ja auch nicht per Referenz (außer du willst sie verändern) aber der Punkt ist, dass kopieren nichts kostet. Interessant sind RValue Referenzen z.B. bei Containern wie std::vector. Angenommen du hast eine Klasse, die im Konstruktor einen std::vector will und den dann abspeicherst. In C++03 hätte man jetzt eine const&amp; genommen, und den vector dann kopiert. Wenn der vector sonst aber garnicht mehr gebraucht wurde, war das eine unnötige Kopie. Jetzt kann man den vector aber &quot;moven&quot;, dadurch wird die Aktion dann etwa so teuer wie das Kopieren eines Pointers.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2243887</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2243887</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Mon, 20 Aug 2012 23:41:10 GMT</pubDate></item><item><title><![CDATA[Reply to C++11 Frage on Mon, 20 Aug 2012 23:56:20 GMT]]></title><description><![CDATA[<p>Eher so teuer wie das Kopieren einer struct mit drei Zeigern <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2243891</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2243891</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Mon, 20 Aug 2012 23:56:20 GMT</pubDate></item><item><title><![CDATA[Reply to C++11 Frage on Tue, 21 Aug 2012 15:49:33 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/25760">@cooky451</a>: Ja das mit den Basistypen habe ich jetz verstanden. Trotzdem vielen Dank für die Erklärung.</p>
<p>Ist es richtig, dass std::move einfach nur ein typecast ausführt? Sowas in der Art?</p>
<pre><code class="language-cpp">reinterpret_cast&lt; Type&amp;&amp; &gt;( x );
</code></pre>
<p>MfG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2244174</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2244174</guid><dc:creator><![CDATA[yihaaa]]></dc:creator><pubDate>Tue, 21 Aug 2012 15:49:33 GMT</pubDate></item><item><title><![CDATA[Reply to C++11 Frage on Tue, 21 Aug 2012 16:05:35 GMT]]></title><description><![CDATA[<p>yihaaa schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/25760">@cooky451</a>: Ja das mit den Basistypen habe ich jetz verstanden. Trotzdem vielen Dank für die Erklärung.</p>
<p>Ist es richtig, dass std::move einfach nur ein typecast ausführt? Sowas in der Art?</p>
<pre><code class="language-cpp">reinterpret_cast&lt; Type&amp;&amp; &gt;( x );
</code></pre>
<p>MfG</p>
</blockquote>
<p>Es ist ein cast, allerdings kein reinterpret_cast, sondern etwas normales (static_cast). Wieso wird eigentlich bei Fragen immer gleich reinterpret_cast ausgepackt?</p>
<p>Sieht also ungefähr so aus:</p>
<pre><code class="language-cpp">template &lt;typename T&gt;
auto move(T&amp;&amp; x) noexcept -&gt; typename std::remove_reference&lt;T&gt;::type&amp;&amp;
{
    return static_cast&lt;typename std::remove_reference&lt;T&gt;::type&amp;&amp;&gt;( x );
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2244179</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2244179</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Tue, 21 Aug 2012 16:05:35 GMT</pubDate></item><item><title><![CDATA[Reply to C++11 Frage on Tue, 21 Aug 2012 16:02:07 GMT]]></title><description><![CDATA[<p>Okay, braucht man doch dann nur um bei einer Klasse den Move Konstruktor sicher aufrufen zu können?</p>
<p>MfG</p>
<p>Edit: Weiß ich nicht <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2244180</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2244180</guid><dc:creator><![CDATA[yihaaa]]></dc:creator><pubDate>Tue, 21 Aug 2012 16:02:07 GMT</pubDate></item><item><title><![CDATA[Reply to C++11 Frage on Wed, 22 Aug 2012 07:10:08 GMT]]></title><description><![CDATA[<p>Warum definiert man move nicht eigentlich einfach so?</p>
<pre><code class="language-cpp">template &lt;typename T&gt;
T&amp;&amp; move(T&amp; x)
{
    return static_cast&lt;T&amp;&amp;&gt;(x):
}
</code></pre>
<p>Dass es dann mit RValues nicht funktioniert, interessiert doch keinen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2244292</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2244292</guid><dc:creator><![CDATA[Kellerautomat]]></dc:creator><pubDate>Wed, 22 Aug 2012 07:10:08 GMT</pubDate></item><item><title><![CDATA[Reply to C++11 Frage on Wed, 22 Aug 2012 07:26:24 GMT]]></title><description><![CDATA[<p>Kellerautomat schrieb:</p>
<blockquote>
<p>Warum definiert man move nicht eigentlich einfach so?</p>
<pre><code class="language-cpp">template &lt;typename T&gt;
T&amp;&amp; move(T&amp; x)
{
    return static_cast&lt;T&amp;&amp;&gt;(x):
}
</code></pre>
<p>Dass es dann mit RValues nicht funktioniert, interessiert doch keinen.</p>
</blockquote>
<p>Dann geht aber doch z.B. das hier nicht mehr, oder?</p>
<pre><code class="language-cpp">string str = &quot;123&quot;;
int z;
istringstream(str) &gt;&gt; z;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2244297</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2244297</guid><dc:creator><![CDATA[out]]></dc:creator><pubDate>Wed, 22 Aug 2012 07:26:24 GMT</pubDate></item><item><title><![CDATA[Reply to C++11 Frage on Wed, 22 Aug 2012 07:37:43 GMT]]></title><description><![CDATA[<p>Wo ist hier ein move?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2244298</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2244298</guid><dc:creator><![CDATA[Kellerautomat]]></dc:creator><pubDate>Wed, 22 Aug 2012 07:37:43 GMT</pubDate></item><item><title><![CDATA[Reply to C++11 Frage on Wed, 22 Aug 2012 08:26:26 GMT]]></title><description><![CDATA[<p>Kellerautomat schrieb:</p>
<blockquote>
<p>Warum definiert man move nicht eigentlich einfach so?</p>
<pre><code class="language-cpp">template &lt;typename T&gt;
T&amp;&amp; move(T&amp; x)
{
    return static_cast&lt;T&amp;&amp;&gt;(x):
}
</code></pre>
<p>Dass es dann mit RValues nicht funktioniert, interessiert doch keinen.</p>
</blockquote>
<p>Das hatte ich mich auch mal gefragt; denn es ist ja sogar eher schädlich, move auf einem Rvalue aufzurufen, da dadurch copy elision unterdrückt wird. Aber ich kann mir vorstellen, dass man in manch generischem Code nicht immer weiß, ob ein Funktionsaufruf (z.B. eine Iterator-Dereferenzierung) ein Lvalue oder Rvalue-Ausdruck ist. Man würde ein Lvalue erwarten, aber es gibt ja auch Iteratoren von &quot;lazy sequences&quot; die den Wert erst dann ausrechnen, wenn man ihn haben will und das ist dann ggf. ein temporäres Objekt...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2244316</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2244316</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Wed, 22 Aug 2012 08:26:26 GMT</pubDate></item></channel></rss>