<?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[Spezieller Konstruktor -&amp;gt; vielleicht weiß jemand was Genaueres ?]]></title><description><![CDATA[<p>Hallo Leute,</p>
<p>in der Abhandlung “Practical Statecharts in C/C++−Quantum Programming for Embedded Systems“ ist auf Seite 51 folgendes Codefragment zu finden, das paradoxerweise 1:1 auch hier auftaucht <a href="https://github.com/PX4/Firmware/blob/master/src/modules/systemlib/state_table.h" rel="nofollow">https://github.com/PX4/Firmware/blob/master/src/modules/systemlib/state_table.h</a>):</p>
<pre><code>// generic &quot;event processor&quot; ...
class StateTable {

public:
	typedef void (StateTable::*Action)(); //pointer-to-member function

	struct Transition { // inner struct transition (aggregate)
	Action action;
	unsigned nextState;
	};

StateTable(Transition const *table, unsigned nStates, unsigned nSignals) : myTable(table), myNsignals(nSignals), myNstates(nStates) {}

// further content

};
</code></pre>
<p>Der Konstruktor macht hier irgendeine Zuordnung – aber wie genau ?</p>
<pre><code>StateTable(Transition const *table, unsigned nStates, unsigned nSignals) : myTable(table), myNsignals(nSignals), myNstates(nStates) {}
</code></pre>
<p>Vielleicht kann mir jemand einen Hinweis geben, wo ich ggf. mal nachlesen könnte – vielleicht ist es aber auch mit wenigen Worten erklärt…</p>
<p>Vielen Dank fürs lesen</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/331848/spezieller-konstruktor-gt-vielleicht-weiß-jemand-was-genaueres</link><generator>RSS for Node</generator><lastBuildDate>Wed, 29 Apr 2026 02:41:58 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/331848.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 23 Mar 2015 23:09:51 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Spezieller Konstruktor -&amp;gt; vielleicht weiß jemand was Genaueres ? on Mon, 23 Mar 2015 23:09:51 GMT]]></title><description><![CDATA[<p>Hallo Leute,</p>
<p>in der Abhandlung “Practical Statecharts in C/C++−Quantum Programming for Embedded Systems“ ist auf Seite 51 folgendes Codefragment zu finden, das paradoxerweise 1:1 auch hier auftaucht <a href="https://github.com/PX4/Firmware/blob/master/src/modules/systemlib/state_table.h" rel="nofollow">https://github.com/PX4/Firmware/blob/master/src/modules/systemlib/state_table.h</a>):</p>
<pre><code>// generic &quot;event processor&quot; ...
class StateTable {

public:
	typedef void (StateTable::*Action)(); //pointer-to-member function

	struct Transition { // inner struct transition (aggregate)
	Action action;
	unsigned nextState;
	};

StateTable(Transition const *table, unsigned nStates, unsigned nSignals) : myTable(table), myNsignals(nSignals), myNstates(nStates) {}

// further content

};
</code></pre>
<p>Der Konstruktor macht hier irgendeine Zuordnung – aber wie genau ?</p>
<pre><code>StateTable(Transition const *table, unsigned nStates, unsigned nSignals) : myTable(table), myNsignals(nSignals), myNstates(nStates) {}
</code></pre>
<p>Vielleicht kann mir jemand einen Hinweis geben, wo ich ggf. mal nachlesen könnte – vielleicht ist es aber auch mit wenigen Worten erklärt…</p>
<p>Vielen Dank fürs lesen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2447809</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2447809</guid><dc:creator><![CDATA[7x7-7]]></dc:creator><pubDate>Mon, 23 Mar 2015 23:09:51 GMT</pubDate></item><item><title><![CDATA[Reply to Spezieller Konstruktor -&amp;gt; vielleicht weiß jemand was Genaueres ? on Tue, 24 Mar 2015 05:20:42 GMT]]></title><description><![CDATA[<p><a href="http://de.wikipedia.org/wiki/Initialisierungsliste" rel="nofollow">http://de.wikipedia.org/wiki/Initialisierungsliste</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2447834</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2447834</guid><dc:creator><![CDATA[patrick246]]></dc:creator><pubDate>Tue, 24 Mar 2015 05:20:42 GMT</pubDate></item><item><title><![CDATA[Reply to Spezieller Konstruktor -&amp;gt; vielleicht weiß jemand was Genaueres ? on Tue, 24 Mar 2015 07:28:01 GMT]]></title><description><![CDATA[<p>Der Konstruktor ist nicht speziell sondern der Regelfall, wenn Parameter übergeben werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2447841</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2447841</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Tue, 24 Mar 2015 07:28:01 GMT</pubDate></item><item><title><![CDATA[Reply to Spezieller Konstruktor -&amp;gt; vielleicht weiß jemand was Genaueres ? on Tue, 24 Mar 2015 08:35:32 GMT]]></title><description><![CDATA[<p>Hallo,<br />
und danke für das Stichwort - wenn man sich den privaten Teil der Klasse anschaut, macht das Ganze dann vielleicht auch Sinn. Das wäre doch jetzt äquivalent - oder ?</p>
<pre><code>class StateTable {

public:
    typedef void (StateTable::*Action)(); //pointer-to-member function

    struct Transition { // inner struct transition (aggregate)
    Action action;
    unsigned nextState;
    };

//StateTable(Transition const *table, unsigned nStates, unsigned nSignals) : //myTable(table), myNsignals(nSignals), myNstates(nStates) {}

StateTable(Transition const *table, unsigned nStates, unsigned nSignals ) {

	myTable = table;
	myNsignals = nSignals;
	myNstates = nStates;
	}

// further content

private:

	Transition const *myTable;
	unsigned myNsignals;
	unsigned myNstates;

}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2447844</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2447844</guid><dc:creator><![CDATA[7x7-7]]></dc:creator><pubDate>Tue, 24 Mar 2015 08:35:32 GMT</pubDate></item><item><title><![CDATA[Reply to Spezieller Konstruktor -&amp;gt; vielleicht weiß jemand was Genaueres ? on Tue, 24 Mar 2015 08:44:03 GMT]]></title><description><![CDATA[<p>Ja. Aber wenns es keinen Grund gibt, nicht die Initialisierungsliste zu verwenden, sollte man das auch nicht tun (sie nicht verwenden, meine ich).<br />
Die Reihenfolge der Deklarationen der Variablen stimmt nicht mit der Initialisierung im Konstruktor überein. Der Compiler sollte hier eine Warnung ausgeben. In diesem Fall ist das egal, es lässt sich aber leicht vermeiden, also warum nicht?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2447845</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2447845</guid><dc:creator><![CDATA[Hyde++ 0]]></dc:creator><pubDate>Tue, 24 Mar 2015 08:44:03 GMT</pubDate></item><item><title><![CDATA[Reply to Spezieller Konstruktor -&amp;gt; vielleicht weiß jemand was Genaueres ? on Tue, 24 Mar 2015 09:15:11 GMT]]></title><description><![CDATA[<p>7x7-7 schrieb:</p>
<blockquote>
<p>Das wäre doch jetzt äquivalent - oder ?</p>
</blockquote>
<p>Nein. Hier werden zunächst alle Member per Defaultkonstriktor angelegt. Anschließend wird ein Wert zugewiesen. Mit der Initialisierungsliste werden die Member mit dem jeweils passenden Konstruktor direkt mit den Werten gefüllt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2447852</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2447852</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Tue, 24 Mar 2015 09:15:11 GMT</pubDate></item><item><title><![CDATA[Reply to Spezieller Konstruktor -&amp;gt; vielleicht weiß jemand was Genaueres ? on Tue, 24 Mar 2015 09:28:26 GMT]]></title><description><![CDATA[<blockquote>
<p>. Mit der Initialisierungsliste werden die Member mit dem jeweils passenden Konstruktor direkt mit den Werten gefüllt.</p>
</blockquote>
<p>Muss nicht erst ein Member angelegt werden, damit es mit einem Inhalt gefüllen werden kann ? Also auch wenn alles konzertiert ablaufen soll, ist doch die Reihenfolge: Anlegen und dann Zuweisen. Möglicherweise ist es ja eine Performancefrage und möglicherweise ist die Initialisierungsliste dann ja schneller als der Defaultkonstruktor mit diskreten Zuweisungen, was bei Statemachines von Bedeutung sein könnte.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2447854</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2447854</guid><dc:creator><![CDATA[7x7-7]]></dc:creator><pubDate>Tue, 24 Mar 2015 09:28:26 GMT</pubDate></item><item><title><![CDATA[Reply to Spezieller Konstruktor -&amp;gt; vielleicht weiß jemand was Genaueres ? on Tue, 24 Mar 2015 09:36:10 GMT]]></title><description><![CDATA[<p>7x7-7 schrieb:</p>
<blockquote>
<p>Muss nicht erst ein Member angelegt werden, damit es mit einem Inhalt gefüllen werden kann ?</p>
</blockquote>
<p>definiere angelegt</p>
<p>7x7-7 schrieb:</p>
<blockquote>
<p>möglicherweise ist die Initialisierungsliste dann ja schneller als der Defaultkonstruktor mit diskreten Zuweisungen</p>
</blockquote>
<p>Ja. Und möglicherweise geht es gar nicht anders (nämlich wenn es keinen Defaultkonstruktor gibt).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2447857</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2447857</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Tue, 24 Mar 2015 09:36:10 GMT</pubDate></item><item><title><![CDATA[Reply to Spezieller Konstruktor -&amp;gt; vielleicht weiß jemand was Genaueres ? on Tue, 24 Mar 2015 11:02:22 GMT]]></title><description><![CDATA[<p>In C++ gibt es einen Unterschied zwischen Initialisierung und Zuweisung.</p>
<pre><code>int a = 42; // Initialisierung
a = 13; // Zuweisung
</code></pre>
<p>Wenn du also im Konstruktorbody die Variablen &quot;initialisierst&quot; machst du also tatsächlich eine Zuweisung.<br />
Es ist bei dir, wie ich schrieb, äquivalent. Im Endeffekt macht es keinen Unterschied (in diesem Fall).</p>
<p>Ich weiß ja nicht, wie viele StateTables du erzeugen willst, aber hier würde ich mir keinen Gedanken über Performancegewinn machen. Der Compiler hat ja sowieso noch die Möglichkeit, zu optimieren. Möglicherweise kann er besser optimieren, wenn du die Initialisierungsliste benutzt, da kenne ich mich nicht gut aus.<br />
Aber nochmal: verwende die Initialisierungsliste einfach immer, wenns geht. Das drückt einfach besser aus, was du erreichen möchtest. Wenn du Objekte hast, die keinen Copy-Konstruktor oder operator= haben, musst du sie ohnehin direkt initialisieren.<br />
Desweiteren gilt dies auch bei Konstanten. Hier kannst du auch nichts zuweisen.</p>
<pre><code>class foo
{
    public:
        foo(int i) : ci(i) { } // ja
        foo(int i) { ci = i; } // nein
    private:
        const int ci;
};
</code></pre>
<p>EDIT: achja, Referenzen müssen natürlich auch initialisiert werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2447860</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2447860</guid><dc:creator><![CDATA[Hyde++ 0]]></dc:creator><pubDate>Tue, 24 Mar 2015 11:02:22 GMT</pubDate></item><item><title><![CDATA[Reply to Spezieller Konstruktor -&amp;gt; vielleicht weiß jemand was Genaueres ? on Tue, 24 Mar 2015 10:52:32 GMT]]></title><description><![CDATA[<p>Hallo,<br />
und danke für die Diskussion. Ich glaube Du hast nun den entscheidenden Hinweis gegeben:</p>
<pre><code>Wenn du Objekte hast, die keinen Copy-Konstruktor oder operator= haben, musst du sie ohnehin direkt initialisieren.
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2447875</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2447875</guid><dc:creator><![CDATA[7x7-7]]></dc:creator><pubDate>Tue, 24 Mar 2015 10:52:32 GMT</pubDate></item></channel></rss>