<?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[Wie lazy evaluation bei Abhängigkeiten]]></title><description><![CDATA[<p>Moin!</p>
<p>Angenommen ich habe folgende Klasse:</p>
<pre><code class="language-cpp">class MyClass {
public:
    double getA();
    int getB();
    double getC();

private:
    double a,c;
    int b;
};
</code></pre>
<p>Jetzt will ich a b und c aber nur bei Bedarf berechnen, das Ergebnis dann auch intern speichern und beim nächsten mal nicht wieder neu berechnen.</p>
<p>Problem: Stellenweise existieren abhängigkeiten. Beispiel:</p>
<pre><code class="language-cpp">b = 17+3;
c = b / 2.0;
a = b-c;
</code></pre>
<p>b könnte ich also bei Bedarf direkt berechnen. Bei c wiederum müsste ich ja wissen, ob ich b schonmal berechnet habe (boolesche Variable?). Wie löst man das am elegantesten? Ich kann zu Beginn ja nicht sagen b = -1, weil im realen Szenario der gesamte Wertebereich des Integer verwendet wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/303780/wie-lazy-evaluation-bei-abhängigkeiten</link><generator>RSS for Node</generator><lastBuildDate>Mon, 10 Aug 2026 07:24:18 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/303780.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 22 May 2012 13:31:57 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Wie lazy evaluation bei Abhängigkeiten on Tue, 22 May 2012 13:31:57 GMT]]></title><description><![CDATA[<p>Moin!</p>
<p>Angenommen ich habe folgende Klasse:</p>
<pre><code class="language-cpp">class MyClass {
public:
    double getA();
    int getB();
    double getC();

private:
    double a,c;
    int b;
};
</code></pre>
<p>Jetzt will ich a b und c aber nur bei Bedarf berechnen, das Ergebnis dann auch intern speichern und beim nächsten mal nicht wieder neu berechnen.</p>
<p>Problem: Stellenweise existieren abhängigkeiten. Beispiel:</p>
<pre><code class="language-cpp">b = 17+3;
c = b / 2.0;
a = b-c;
</code></pre>
<p>b könnte ich also bei Bedarf direkt berechnen. Bei c wiederum müsste ich ja wissen, ob ich b schonmal berechnet habe (boolesche Variable?). Wie löst man das am elegantesten? Ich kann zu Beginn ja nicht sagen b = -1, weil im realen Szenario der gesamte Wertebereich des Integer verwendet wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2214152</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2214152</guid><dc:creator><![CDATA[Fauler]]></dc:creator><pubDate>Tue, 22 May 2012 13:31:57 GMT</pubDate></item><item><title><![CDATA[Reply to Wie lazy evaluation bei Abhängigkeiten on Tue, 22 May 2012 13:36:00 GMT]]></title><description><![CDATA[<p>Zeiger verwenden. Zeiger ist 0, wenn der Wert noch nicht berechnet wurde, sonst zeigt er auf den Wert.<br />
Im Allgemeinen macht sowas aber ehrlich gesagt kaum Sinn. Wenn das tatsächlich nur einfache Additionen/Divisionen sind ist jedesmal neu berechnen wohl schneller - und leichter. Stichwort premature optimization.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2214154</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2214154</guid><dc:creator><![CDATA[kleiner Troll]]></dc:creator><pubDate>Tue, 22 May 2012 13:36:00 GMT</pubDate></item><item><title><![CDATA[Reply to Wie lazy evaluation bei Abhängigkeiten on Tue, 22 May 2012 13:38:30 GMT]]></title><description><![CDATA[<p>Verwende einen bool oder boost::optional (läuft meines Wissens auf das gleiche raus).<br />
EDIT: Wenn auch Speicher lazy verwendet werden soll, bietet sich natürlich auch ein pointer an, aber dynamischer Speicher ist bei einzelnen ints oder doubles sehr wahrscheinlich langsamer und verbraucht im Endeffekt mehr Speicher als ein boost::optional.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2214155</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2214155</guid><dc:creator><![CDATA[GorbGorb]]></dc:creator><pubDate>Tue, 22 May 2012 13:38:30 GMT</pubDate></item><item><title><![CDATA[Reply to Wie lazy evaluation bei Abhängigkeiten on Tue, 22 May 2012 13:40:51 GMT]]></title><description><![CDATA[<p>Hast du dies mal versucht?<br />
<a href="https://www.google.de/search?&amp;q=lazy%20evaluation%20c%2B%2B" rel="nofollow">Google: lazy evaluation c++</a><br />
Da werden gute und allgemeine Verfahren erklärt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2214156</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2214156</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Tue, 22 May 2012 13:40:51 GMT</pubDate></item><item><title><![CDATA[Reply to Wie lazy evaluation bei Abhängigkeiten on Tue, 22 May 2012 23:43:46 GMT]]></title><description><![CDATA[<p><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="👍"
    /><br />
Boost.Optional ist eine Lib die mMn. viel mehr Aufmerksamkeit verdient als sie erhält.<br />
Vielleicht wäre ein anderer Name besser gewesen, z.B. <code>nullable</code> .</p>
<p>Und ja, für das hier beschriebene Beispiel macht das alles keinen Sinn, da die Berechnung so ultimativ billig ist, dass sämtliche Optimierungsversuche mit Lazy-Evaluation zum Scheitern verurteilt sind.</p>
<p>Für aufwendigere Berechnungen kann es allerdings Sinn machen.<br />
Und dann sind <code>boost::optional</code> oder <code>boost::scoped_ptr/std::unique_ptr</code> gute Möglichkeiten. Je nach <code>sizeof(T)</code> .</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2214319</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2214319</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Tue, 22 May 2012 23:43:46 GMT</pubDate></item><item><title><![CDATA[Reply to Wie lazy evaluation bei Abhängigkeiten on Wed, 23 May 2012 07:45:21 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p><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="👍"
    /><br />
Boost.Optional ist eine Lib die mMn. viel mehr Aufmerksamkeit verdient als sie erhält.<br />
Vielleicht wäre ein anderer Name besser gewesen, z.B. <code>nullable</code> .</p>
<p>Und ja, für das hier beschriebene Beispiel macht das alles keinen Sinn, da die Berechnung so ultimativ billig ist, dass sämtliche Optimierungsversuche mit Lazy-Evaluation zum Scheitern verurteilt sind.</p>
<p>Für aufwendigere Berechnungen kann es allerdings Sinn machen.<br />
Und dann sind <code>boost::optional</code> oder <code>boost::scoped_ptr/std::unique_ptr</code> gute Möglichkeiten. Je nach <code>sizeof(T)</code> .</p>
</blockquote>
<p>Ich finde, es hängt nicht nur von der Größe von T ab, sondern auch, wie oft eine Klasse instanziiert wird. Nur weil MyClass billige Berechnungen enthält, summiert sich das am Ende trotzdem auf, wenn z.B. alle 20 ms zwischen 1400 und 2000 Objekte von MyClass angelegt werden, von denen aber anschließend 1000 verworfen werden und man die Berechnungen nur für die verbleibenden objekte braucht</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2214371</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2214371</guid><dc:creator><![CDATA[Fauler]]></dc:creator><pubDate>Wed, 23 May 2012 07:45:21 GMT</pubDate></item></channel></rss>