<?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[Eine Frage zu rvalue Referenzen]]></title><description><![CDATA[<p>Guten Morgen,</p>
<p>ich habe eine Frage zu Rvalue Referenzen. Grundsätzlich ist mir die Bedeutung schon klar. Folgendes verwirrt mich jedoch:</p>
<pre><code class="language-cpp">template&lt;class T&gt;
T* address(T&amp;&amp; x) {
	return &amp;x;
}

char* p = address('A');
*p = 'B';
</code></pre>
<p>Da 'A' eine Konstante (und damit ein rvalue) ist, verwundert es mich, dass ich sie problemlos einem char* zuweisen kann.<br />
Vermuten tue ich lediglich, dass durch die rvalueness die Lebenszeit der Konstanten verlängert wird und daher auch danach noch gültig ist.</p>
<p>Wenn dies jedoch möglich ist, stellt sich mir die Frage, ob die Deklaration oben mit &quot;T const&amp;&amp;&quot; noch einen Sinn ergeben würde oder nicht? Ist es überhaupt sinnvoll konstante rvalue Referenzen zu führen?</p>
<p>Vorab schon mal vielen Dank für Aufklärung <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/topic/270668/eine-frage-zu-rvalue-referenzen</link><generator>RSS for Node</generator><lastBuildDate>Sat, 29 Aug 2026 23:03:40 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/270668.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 16 Jul 2010 08:33:59 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Eine Frage zu rvalue Referenzen on Fri, 16 Jul 2010 08:33:59 GMT]]></title><description><![CDATA[<p>Guten Morgen,</p>
<p>ich habe eine Frage zu Rvalue Referenzen. Grundsätzlich ist mir die Bedeutung schon klar. Folgendes verwirrt mich jedoch:</p>
<pre><code class="language-cpp">template&lt;class T&gt;
T* address(T&amp;&amp; x) {
	return &amp;x;
}

char* p = address('A');
*p = 'B';
</code></pre>
<p>Da 'A' eine Konstante (und damit ein rvalue) ist, verwundert es mich, dass ich sie problemlos einem char* zuweisen kann.<br />
Vermuten tue ich lediglich, dass durch die rvalueness die Lebenszeit der Konstanten verlängert wird und daher auch danach noch gültig ist.</p>
<p>Wenn dies jedoch möglich ist, stellt sich mir die Frage, ob die Deklaration oben mit &quot;T const&amp;&amp;&quot; noch einen Sinn ergeben würde oder nicht? Ist es überhaupt sinnvoll konstante rvalue Referenzen zu führen?</p>
<p>Vorab schon mal vielen Dank für Aufklärung <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/1927050</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1927050</guid><dc:creator><![CDATA[FrEEzE2046]]></dc:creator><pubDate>Fri, 16 Jul 2010 08:33:59 GMT</pubDate></item><item><title><![CDATA[Reply to Eine Frage zu rvalue Referenzen on Fri, 16 Jul 2010 11:15:48 GMT]]></title><description><![CDATA[<p>...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1927062</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1927062</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Fri, 16 Jul 2010 11:15:48 GMT</pubDate></item><item><title><![CDATA[Reply to Eine Frage zu rvalue Referenzen on Fri, 16 Jul 2010 08:53:47 GMT]]></title><description><![CDATA[<p>CSpille schrieb:</p>
<blockquote>
<p>Was soll '&amp;&amp;' bewirken?</p>
<p>Mein Compiler meckert verständlicherweise:</p>
</blockquote>
<p>Hast du auch C++0x angemacht?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1927063</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1927063</guid><dc:creator><![CDATA[l&#x27;abra d&#x27;or]]></dc:creator><pubDate>Fri, 16 Jul 2010 08:53:47 GMT</pubDate></item><item><title><![CDATA[Reply to Eine Frage zu rvalue Referenzen on Fri, 16 Jul 2010 08:59:15 GMT]]></title><description><![CDATA[<p>CSpille schrieb:</p>
<blockquote>
<p>Was soll '&amp;&amp;' bewirken?</p>
</blockquote>
<p>&amp;&amp; == Rvalue Reference. Kommt mit C++0x</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1927068</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1927068</guid><dc:creator><![CDATA[FrEEzE2046]]></dc:creator><pubDate>Fri, 16 Jul 2010 08:59:15 GMT</pubDate></item><item><title><![CDATA[Reply to Eine Frage zu rvalue Referenzen on Fri, 16 Jul 2010 11:15:39 GMT]]></title><description><![CDATA[<p>...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1927069</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1927069</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Fri, 16 Jul 2010 11:15:39 GMT</pubDate></item><item><title><![CDATA[Reply to Eine Frage zu rvalue Referenzen on Fri, 16 Jul 2010 09:05:38 GMT]]></title><description><![CDATA[<p>CSpille schrieb:</p>
<blockquote>
<p>Wofür braucht man sowas?</p>
</blockquote>
<p>Höhere Geschwindigkeiten, da unnötige Kopien reduziert/vermieden werden können.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1927071</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1927071</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Fri, 16 Jul 2010 09:05:38 GMT</pubDate></item><item><title><![CDATA[Reply to Eine Frage zu rvalue Referenzen on Fri, 16 Jul 2010 09:33:02 GMT]]></title><description><![CDATA[<p>FrEEzE2046 schrieb:</p>
<blockquote>
<p>ich habe eine Frage zu Rvalue Referenzen. Grundsätzlich ist mir die Bedeutung schon klar. Folgendes verwirrt mich jedoch:</p>
<pre><code class="language-cpp">template&lt;class T&gt;
T* address(T&amp;&amp; x) {
	return &amp;x;
}

char* p = address('A');
*p = 'B';
</code></pre>
<p>Da 'A' eine Konstante (und damit ein rvalue) ist, verwundert es mich, dass ich sie problemlos einem char* zuweisen kann.<br />
Vermuten tue ich lediglich, dass durch die rvalueness die Lebenszeit der Konstanten verlängert wird und daher auch danach noch gültig ist.</p>
</blockquote>
<p>Falsch vermutet. Dein Code ruft undefiniertes Verhalten hervor. Im Endeffekt ist es dasselbe Problem wie bei diesem Beispiel:</p>
<pre><code class="language-cpp">template&lt;class T&gt;
T const* address(T const&amp; x) {
	return &amp;x;
}

char const* p = address('A');
cout &lt;&lt; *p; // OUCH!
</code></pre>
<p>In beiden Fällen wird ein temporäres char-Objekt angelegt und mit 'A' initialisiert. Man merkt sich die Adresse auf das Objekt. Das Objekt wird wieder zerstört. Und danach wird ein ungültigen Zeiger verwendet.</p>
<p>FrEEzE2046 schrieb:</p>
<blockquote>
<p>Wenn dies jedoch möglich ist, stellt sich mir die Frage, ob die Deklaration oben mit &quot;T const&amp;&amp;&quot; noch einen Sinn ergeben würde oder nicht? Ist es überhaupt sinnvoll konstante rvalue Referenzen zu führen?</p>
</blockquote>
<p>Nicht wirklich.</p>
<p>Übrigens:</p>
<pre><code class="language-cpp">template&lt;class T&gt;
void foo(T&amp;&amp; x);

int main() {
  int i = 23;
  foo(i);   // --&gt; foo&lt;int&amp;&gt;(int&amp;);
  foo(i+1); // --&gt; foo&lt;int&gt;(int&amp;&amp;);
}
</code></pre>
<p>==&gt; x ist je nach Argument entweder eine Rvalue- oder Lvalue-Referenz. Erklären kann man das mit der speziellen Deduktionsregel für T&amp;&amp; und dem Reference-Collapsing (&amp;+&amp; = &amp;, &amp;+&amp;&amp;=&amp;, &amp;&amp;+&amp;=&amp;, &amp;&amp;+&amp;&amp;=&amp;&amp;).</p>
<p>Übrigens 2: Eine <em>benannte</em> Rvalue-Referenz in einem Ausdruck ist ein Lvalue.</p>
<p>kk</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1927087</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1927087</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Fri, 16 Jul 2010 09:33:02 GMT</pubDate></item><item><title><![CDATA[Reply to Eine Frage zu rvalue Referenzen on Fri, 16 Jul 2010 16:52:22 GMT]]></title><description><![CDATA[<p>Von all den Artikeln, die ich über Rvalue-Referenzen gefunden habe, war nur einer aktuell genug (beschreibt die aktuellen Regeln):<br />
<a href="http://cpp-next.com/archive/2009/09/move-it-with-rvalue-references/" rel="nofollow">http://cpp-next.com/archive/2009/09/move-it-with-rvalue-references/</a><br />
(siehe auch den Artikel davor und die folgenden Artikel in der Serie)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1927366</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1927366</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Fri, 16 Jul 2010 16:52:22 GMT</pubDate></item><item><title><![CDATA[Reply to Eine Frage zu rvalue Referenzen on Sun, 18 Jul 2010 09:55:52 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/24868">@krümelkacker</a><br />
Danke, ich werde mir das mal anschauen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1927981</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1927981</guid><dc:creator><![CDATA[FrEEzE2046]]></dc:creator><pubDate>Sun, 18 Jul 2010 09:55:52 GMT</pubDate></item></channel></rss>