<?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[zeitpunkt des lambda capturing]]></title><description><![CDATA[<p>hallo,</p>
<p>folgende &gt;anomalie&lt; hat mich soeben mit einiger debug-zeit beschert:</p>
<pre><code>#include &lt;iostream&gt; 
int main()
{
	int i = 5;
	auto f = [i](){ std::cout &lt;&lt; i &lt;&lt; '\n'; };
	f();
	i = 42;
	f();
}
</code></pre>
<p>output:</p>
<pre><code>5
5
</code></pre>
<p>ich bin davon ausgegangen, dass alle value captured objekte bei jedem call neu kopiert werden. wenn ich nun die variable i per referenz uebergebe, damit das lambda immer den neusten wert zur verfuegung hat, so beeintraechtigt das die kapselung (das lambda hat non-const zugriff obwohl es nur liest). via const ref uebergeben ist ja leider auch nicht moeglich (wieso nicht eigentlich?).</p>
<p>vorschlaege?</p>
<p>LG</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/339227/zeitpunkt-des-lambda-capturing</link><generator>RSS for Node</generator><lastBuildDate>Sun, 12 Apr 2026 11:18:04 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/339227.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 13 Aug 2016 14:55:44 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to zeitpunkt des lambda capturing on Sat, 13 Aug 2016 14:55:44 GMT]]></title><description><![CDATA[<p>hallo,</p>
<p>folgende &gt;anomalie&lt; hat mich soeben mit einiger debug-zeit beschert:</p>
<pre><code>#include &lt;iostream&gt; 
int main()
{
	int i = 5;
	auto f = [i](){ std::cout &lt;&lt; i &lt;&lt; '\n'; };
	f();
	i = 42;
	f();
}
</code></pre>
<p>output:</p>
<pre><code>5
5
</code></pre>
<p>ich bin davon ausgegangen, dass alle value captured objekte bei jedem call neu kopiert werden. wenn ich nun die variable i per referenz uebergebe, damit das lambda immer den neusten wert zur verfuegung hat, so beeintraechtigt das die kapselung (das lambda hat non-const zugriff obwohl es nur liest). via const ref uebergeben ist ja leider auch nicht moeglich (wieso nicht eigentlich?).</p>
<p>vorschlaege?</p>
<p>LG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2505388</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2505388</guid><dc:creator><![CDATA[ritter_des_dunkeln]]></dc:creator><pubDate>Sat, 13 Aug 2016 14:55:44 GMT</pubDate></item><item><title><![CDATA[Reply to zeitpunkt des lambda capturing on Sat, 13 Aug 2016 15:45:19 GMT]]></title><description><![CDATA[<p>ritter_des_dunkeln schrieb:</p>
<blockquote>
<p>ich bin davon ausgegangen, dass alle value captured objekte bei jedem call neu kopiert werden.</p>
</blockquote>
<p>Wie soll das gehen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2505390</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2505390</guid><dc:creator><![CDATA[Mechanics]]></dc:creator><pubDate>Sat, 13 Aug 2016 15:45:19 GMT</pubDate></item><item><title><![CDATA[Reply to zeitpunkt des lambda capturing on Sat, 13 Aug 2016 16:06:24 GMT]]></title><description><![CDATA[<p>Mechanics schrieb:</p>
<blockquote>
<p>ritter_des_dunkeln schrieb:</p>
<blockquote>
<p>ich bin davon ausgegangen, dass alle value captured objekte bei jedem call neu kopiert werden.</p>
</blockquote>
<p>Wie soll das gehen?</p>
</blockquote>
<p>so wie jede art von call-by-value. am beispiel von oben:<br />
<code>f();</code> <strong>waere</strong> sozusagen die kurzschreibweise von <code>f_(i);</code> , wobei <code>f_(int)</code> das argument by value akzeptiert. dass das lambda zur zeit der definition eine kopie aller by-value-captures erstellt (und bis zur zerstoerung beibehaelt), ist fuer mich viel weniger naheliegend / intuitiv.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2505391</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2505391</guid><dc:creator><![CDATA[ritter_des_dunkeln]]></dc:creator><pubDate>Sat, 13 Aug 2016 16:06:24 GMT</pubDate></item><item><title><![CDATA[Reply to zeitpunkt des lambda capturing on Sat, 13 Aug 2016 16:39:03 GMT]]></title><description><![CDATA[<p>Versuch doch mal, einen per Referenz übergeben Wert zu ändern. Du wirst dich wundern...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2505399</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2505399</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Sat, 13 Aug 2016 16:39:03 GMT</pubDate></item><item><title><![CDATA[Reply to zeitpunkt des lambda capturing on Sat, 13 Aug 2016 16:42:23 GMT]]></title><description><![CDATA[<p>manni66 schrieb:</p>
<blockquote>
<p>Versuch doch mal, einen per Referenz übergeben Wert zu ändern. Du wirst dich wundern...</p>
</blockquote>
<p><a href="http://ideone.com/iD9fcK" rel="nofollow">so?</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2505401</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2505401</guid><dc:creator><![CDATA[ritter_des_dunkeln]]></dc:creator><pubDate>Sat, 13 Aug 2016 16:42:23 GMT</pubDate></item><item><title><![CDATA[Reply to zeitpunkt des lambda capturing on Sat, 13 Aug 2016 16:49:11 GMT]]></title><description><![CDATA[<p>Wenn das Lambda das i jedes Mal neu kopieren würde, hätte das allerdings unangenehme Konsequenzen: man könnte dann ein Lambda, das eine loakle Variable captured, nicht mehr außerhalb des Blocks verwenden, in dem die loakle Variable lebt.</p>
<p>Code wie dieser hier würde nicht mehr funktionieren:</p>
<pre><code>#include &lt;iostream&gt;

auto make_number_adder(int i) {
    return [i](int j) { return i + j; };
}

int main() {
    auto add2 = make_number_adder(2);
    auto add3 = make_number_adder(3);
    std::cout &lt;&lt; add2(4) &lt;&lt; &quot;, &quot; &lt;&lt; add3(7) &lt;&lt; '\n';
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2505402</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2505402</guid><dc:creator><![CDATA[wob]]></dc:creator><pubDate>Sat, 13 Aug 2016 16:49:11 GMT</pubDate></item><item><title><![CDATA[Reply to zeitpunkt des lambda capturing on Sat, 13 Aug 2016 16:52:00 GMT]]></title><description><![CDATA[<p>ritter_des_dunkeln schrieb:</p>
<blockquote>
<p>manni66 schrieb:</p>
<blockquote>
<p>Versuch doch mal, einen per Referenz übergeben Wert zu ändern. Du wirst dich wundern...</p>
</blockquote>
<p><a href="http://ideone.com/iD9fcK" rel="nofollow">so?</a></p>
</blockquote>
<p>Ok, ich hätte geschworen, dass mutable auch für Referenzwerte benötigt wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2505403</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2505403</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Sat, 13 Aug 2016 16:52:00 GMT</pubDate></item><item><title><![CDATA[Reply to zeitpunkt des lambda capturing on Sat, 13 Aug 2016 16:57:30 GMT]]></title><description><![CDATA[<p>wob schrieb:</p>
<blockquote>
<p>[...]</p>
</blockquote>
<p>das habe ich nicht bedacht, danke fuer das anschauliche beispiel. <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/2505404</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2505404</guid><dc:creator><![CDATA[ritter_des_dunkeln]]></dc:creator><pubDate>Sat, 13 Aug 2016 16:57:30 GMT</pubDate></item><item><title><![CDATA[Reply to zeitpunkt des lambda capturing on Sat, 13 Aug 2016 20:30:40 GMT]]></title><description><![CDATA[<p>Etwas OT, ich meine aber dass in funktionalen Sprachen Bindings zu lokalen Namen gehen, die werden dann transparent am Leben gehalten.</p>
<p>Falls OP also aus der funktionalen Ecke kommt, ist das eine legitime Falle. C++ kann das aber nicht, da ist alles Funktionale ja eh nur draufgebastelt <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/2505418</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2505418</guid><dc:creator><![CDATA[namehier]]></dc:creator><pubDate>Sat, 13 Aug 2016 20:30:40 GMT</pubDate></item><item><title><![CDATA[Reply to zeitpunkt des lambda capturing on Sat, 13 Aug 2016 22:38:33 GMT]]></title><description><![CDATA[<p>manni66 schrieb:</p>
<blockquote>
<p>Ok, ich hätte geschworen, dass mutable auch für Referenzwerte benötigt wird.</p>
</blockquote>
<p>An den Fragesteller: hier ist nochmal Lektüre bzgl. const bei gecaptureten Variablen (ich könnte mir vorstellen, dass manni66 daran gedacht hat):<br />
<a href="http://aristeia.com/Papers/appearing%20and%20disappearing%20consts.pdf" rel="nofollow">http://aristeia.com/Papers/appearing%20and%20disappearing%20consts.pdf</a> (ab S. 4) und<br />
<a href="http://scottmeyers.blogspot.de/2014/02/capture-quirk-in-c14.html" rel="nofollow">http://scottmeyers.blogspot.de/2014/02/capture-quirk-in-c14.html</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2505430</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2505430</guid><dc:creator><![CDATA[wob]]></dc:creator><pubDate>Sat, 13 Aug 2016 22:38:33 GMT</pubDate></item><item><title><![CDATA[Reply to zeitpunkt des lambda capturing on Sun, 14 Aug 2016 03:06:43 GMT]]></title><description><![CDATA[<p>@namehier<br />
Das hat mit funktional oder nicht funktional nix zu tun, dabei geht's eher darum ob die Sprache nen GC verwendet oder nicht.</p>
<p>EDIT: OK, den Elefanten hab' ich wiedermal übersehen... In einer funktionalen Sprache, wie soll man bitte den Unterschied feststellen ob eine Referenz oder eine Kopie in den Funktor gebunden wird?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2505439</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2505439</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Sun, 14 Aug 2016 03:06:43 GMT</pubDate></item></channel></rss>