<?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 gut kann der compiler hier optimieren]]></title><description><![CDATA[<p>hallo</p>
<p>da ich redunanten code nicht mag, schreibe ich bei projekten in etwa folgendes:</p>
<pre><code>class foo
{
    ::std::string str;
public:
    foo(::std::string const&amp; str = &quot;default&quot;)
        : str(str)
    {
    }
    ::std::string const&amp; get_str() const
    {
        return this-&gt;str;
    }
    void set_str(::std::string const&amp; str = foo().get_str())
    {
        this-&gt;str = str;
    }
};
</code></pre>
<p>also mir geht es darum die default-parameter allgemein verwalten zu können. wird jedoch - wenn man bei set_str keinen parameter angibt - wirklich eine neue instanz erstellt, dessen methode dann aufgerufen wird? oder kann das geschickt optimiert werden, dass ich keinen overhead habe im gegensatz zur mehtode, zwei mal &quot;default&quot; zu schreiben? ich möchte eigentlich keinen runtime overhead haben nur wegen sauberem code.</p>
<p>gruss</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/321530/wie-gut-kann-der-compiler-hier-optimieren</link><generator>RSS for Node</generator><lastBuildDate>Mon, 20 Jul 2026 03:42:05 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/321530.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 15 Nov 2013 09:42:39 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to wie gut kann der compiler hier optimieren on Fri, 15 Nov 2013 09:42:39 GMT]]></title><description><![CDATA[<p>hallo</p>
<p>da ich redunanten code nicht mag, schreibe ich bei projekten in etwa folgendes:</p>
<pre><code>class foo
{
    ::std::string str;
public:
    foo(::std::string const&amp; str = &quot;default&quot;)
        : str(str)
    {
    }
    ::std::string const&amp; get_str() const
    {
        return this-&gt;str;
    }
    void set_str(::std::string const&amp; str = foo().get_str())
    {
        this-&gt;str = str;
    }
};
</code></pre>
<p>also mir geht es darum die default-parameter allgemein verwalten zu können. wird jedoch - wenn man bei set_str keinen parameter angibt - wirklich eine neue instanz erstellt, dessen methode dann aufgerufen wird? oder kann das geschickt optimiert werden, dass ich keinen overhead habe im gegensatz zur mehtode, zwei mal &quot;default&quot; zu schreiben? ich möchte eigentlich keinen runtime overhead haben nur wegen sauberem code.</p>
<p>gruss</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2365620</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2365620</guid><dc:creator><![CDATA[asdfasf]]></dc:creator><pubDate>Fri, 15 Nov 2013 09:42:39 GMT</pubDate></item><item><title><![CDATA[Reply to wie gut kann der compiler hier optimieren on Fri, 15 Nov 2013 09:54:43 GMT]]></title><description><![CDATA[<p>Also Dein Code enthaelt <strong>sehr</strong> viel Redundanz. Wenn Du solche setter und getter hast, kannst Du den member gleich public machen. <code>using</code> vermeidet das staendige <code>std::</code> Dasselbe viel kuerzer:</p>
<pre><code>using std::string;
class foo
{
public:
    string str;
    foo(string const&amp; str = &quot;default&quot;)
        : str(str)
    {
    }
};
</code></pre>
<p>Und wenn die member schon public sind, geht auch</p>
<pre><code>using std::string
struct foo
{
    string str = &quot;default&quot;
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2365625</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2365625</guid><dc:creator><![CDATA[skjskljsdff]]></dc:creator><pubDate>Fri, 15 Nov 2013 09:54:43 GMT</pubDate></item><item><title><![CDATA[Reply to wie gut kann der compiler hier optimieren on Fri, 15 Nov 2013 09:57:27 GMT]]></title><description><![CDATA[<blockquote>
<p>also mir geht es darum die default-parameter allgemein verwalten zu können.</p>
</blockquote>
<p>Ich persoenlich vermeide default-Parameter gaenzlich, der Uebersicht halber.</p>
<blockquote>
<p>nur wegen sauberem code</p>
</blockquote>
<p>Nun, default-Parameter sind fuer mich unsauber. Wenn der default-Variante zu 90% benutzt wird, dann sollte man sich ueberlegen warum die Methode ueberhaupt diesen Parameter hat. Wenn sie nur zu 10% benutzt wird, warum dann ueberhaupt einen default-Wert. Weiterhin sind Methodenaufrufe mit impliziten Parametern fuer mich persoenlich schlechter zu warten, beim Lesen von Code eben nicht alles dasteht.</p>
<p>Zur Frage: Der Compiler kann optimieren, wird hoechstwahrscheinlich auch, muss aber nicht. Abhilfe fuer diese Unsicherheit schafft ein Blick in den generierten ASM-Code.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2365626</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2365626</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Fri, 15 Nov 2013 09:57:27 GMT</pubDate></item><item><title><![CDATA[Reply to wie gut kann der compiler hier optimieren on Fri, 15 Nov 2013 10:15:11 GMT]]></title><description><![CDATA[<p>Hmm, ich habe eine setPixel Methode, in der ich ganz selten den Alphawert brauche, aber so gut wie immer R G B. Dort habe ich dann <code>unsigned char a = 255</code> als Defaultwert, das fand ich schon praktisch.</p>
<p>Warum sollte da zwei Methoden daraus machen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2365629</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2365629</guid><dc:creator><![CDATA[CppNeuland]]></dc:creator><pubDate>Fri, 15 Nov 2013 10:15:11 GMT</pubDate></item><item><title><![CDATA[Reply to wie gut kann der compiler hier optimieren on Fri, 15 Nov 2013 11:40:32 GMT]]></title><description><![CDATA[<blockquote>
<p>Warum sollte da zwei Methoden daraus machen?</p>
</blockquote>
<p>Gegenfrage: Habe ich das vorgeschlagen? Man koennte auch einen Typ Color anbieten, der entsprechende Konstruktoren hat.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2365657</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2365657</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Fri, 15 Nov 2013 11:40:32 GMT</pubDate></item><item><title><![CDATA[Reply to wie gut kann der compiler hier optimieren on Fri, 15 Nov 2013 12:19:36 GMT]]></title><description><![CDATA[<p>Ne, hast du nicht, aber auch wieder ein Objekt mehr, nur um einen Defaultwert zu sparen? Ist sicher eine Lösung und solch eine Colorklasse habe ich auch, aber ich wollte auch die Methode anbieten, die mit einzelnen Werten arbeiten kann und um dort nicht noch eine zusätzliche Methode ohne alpha machen zu müssen, griff ich dann auf den Defaultwert zurück.</p>
<p>Na egal, macht halt jeder wie er will. Ich finde die Defaultwerte schon nützlich, aber ich bin auch C++ Anfänger.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2365666</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2365666</guid><dc:creator><![CDATA[CppNeuland]]></dc:creator><pubDate>Fri, 15 Nov 2013 12:19:36 GMT</pubDate></item><item><title><![CDATA[Reply to wie gut kann der compiler hier optimieren on Fri, 15 Nov 2013 17:20:03 GMT]]></title><description><![CDATA[<p>knivil schrieb:</p>
<blockquote>
<blockquote>
<p>Warum sollte da zwei Methoden daraus machen?</p>
</blockquote>
<p>Gegenfrage: Habe ich das vorgeschlagen? Man koennte auch einen Typ Color anbieten, der entsprechende Konstruktoren hat.</p>
</blockquote>
<p>Damit verlagerst du das Problem auch nur in den Konstruktor. Da du keine Defaultparameter verwendest, bist du zur Überladung gezwungen. Im Endeffekt hast du also doch zwei Methoden, nur um den Defaultparameter zu vermeiden.</p>
<p>CppNeuland schrieb:</p>
<blockquote>
<p>Hmm, ich habe eine setPixel Methode, in der ich ganz selten den Alphawert brauche, aber so gut wie immer R G B. Dort habe ich dann <code>unsigned char a = 255</code> als Defaultwert, das fand ich schon praktisch.</p>
</blockquote>
<p>Ist es auch, keine Frage. Problematisch wirds nur, wenn man beim Aufruf jeweils überlegen (oder sogar nachschauen) muss, wie nun der Wert aussieht, wenn man ihn weglässt. In diesem Fall schreibt man ihn lieber gleich hin.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2365758</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2365758</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Fri, 15 Nov 2013 17:20:03 GMT</pubDate></item></channel></rss>