<?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 Stilfrage]]></title><description><![CDATA[<p>Hallo,</p>
<p>ist es guter C++-Stil ganz gewöhnliche Membervariablen per Initialisierungsliste zu initialisieren?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/236990/eine-stilfrage</link><generator>RSS for Node</generator><lastBuildDate>Wed, 23 Sep 2026 14:54:37 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/236990.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 22 Mar 2009 22:44:23 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Eine Stilfrage on Sun, 22 Mar 2009 22:44:23 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ist es guter C++-Stil ganz gewöhnliche Membervariablen per Initialisierungsliste zu initialisieren?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1684541</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1684541</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sun, 22 Mar 2009 22:44:23 GMT</pubDate></item><item><title><![CDATA[Reply to Eine Stilfrage on Sun, 22 Mar 2009 22:48:38 GMT]]></title><description><![CDATA[<p>daersc schrieb:</p>
<blockquote>
<p>ist es guter C++-Stil ganz gewöhnliche Membervariablen per Initialisierungsliste zu initialisieren?</p>
</blockquote>
<p>Was sind &quot;ganz gewöhnliche&quot; Membervariablen? Oder was sind &quot;ungewöhnliche&quot; Membervariablen? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /><br />
Und ich initialisiere alle Membervariablen per Initialisierungsliste. Denn in der Initialisierungsliste ruft man direkt den Konstruktor auf, wenn das Objekt konstruiert wird. Wenn man eine Variable nicht in der Initialisierungsliste initialisiert, dann wird deren Standardkonstruktor aufgerufen. Wenn man im Konstruktor dann dieser Variable etwas zuweist, macht man eine Kopie. Also hat man schlussendlich einen unnötigen Schritt gemacht.</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1684542</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1684542</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Sun, 22 Mar 2009 22:48:38 GMT</pubDate></item><item><title><![CDATA[Reply to Eine Stilfrage on Sun, 22 Mar 2009 22:49:01 GMT]]></title><description><![CDATA[<p>beide versionen haben vor- und nachteile. ich halte beides für guten stil. kommt halt drauf an. ich kenne leute, die machen eigentlich alles in initialisiererlisten. naja, manchmal wirds häßlich. und alles ohne initialisiererlisten geht natürlich nicht.<br />
ich benutze sie nicht mehr so intensiv aber hab gar nix dagegen, code zu lesen, der sie intensiv benutzt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1684543</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1684543</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Sun, 22 Mar 2009 22:49:01 GMT</pubDate></item><item><title><![CDATA[Reply to Eine Stilfrage on Mon, 23 Mar 2009 15:28:00 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>beide versionen haben vor- und nachteile.</p>
</blockquote>
<p>Was sind denn die Vorteile von späterer Zuweisung? Ausser dass man einen Member verzögert initialisieren will, weil er noch von irgendwas abhängig ist, fällt mir jetzt nicht gerade etwas ein.</p>
<p>Bei der Initialisierungsliste muss man halt aufpassen, dass die Member in der Reihenfolge der Deklaration initialisiert werden...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1684893</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1684893</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Mon, 23 Mar 2009 15:28:00 GMT</pubDate></item><item><title><![CDATA[Reply to Eine Stilfrage on Mon, 23 Mar 2009 15:34:12 GMT]]></title><description><![CDATA[<p>mit dme neune standard geht das ja endlich im header</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1684899</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1684899</guid><dc:creator><![CDATA[standardstil]]></dc:creator><pubDate>Mon, 23 Mar 2009 15:34:12 GMT</pubDate></item><item><title><![CDATA[Reply to Eine Stilfrage on Mon, 23 Mar 2009 15:35:25 GMT]]></title><description><![CDATA[<p>standardstil schrieb:</p>
<blockquote>
<p>mit dme neune standard geht das ja endlich im header</p>
</blockquote>
<p>Als ob das besser wäre -.-</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1684901</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1684901</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Mon, 23 Mar 2009 15:35:25 GMT</pubDate></item><item><title><![CDATA[Reply to Eine Stilfrage on Mon, 23 Mar 2009 16:32:15 GMT]]></title><description><![CDATA[<p>was ist daran schlechter?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1684930</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1684930</guid><dc:creator><![CDATA[standardstil]]></dc:creator><pubDate>Mon, 23 Mar 2009 16:32:15 GMT</pubDate></item><item><title><![CDATA[Reply to Eine Stilfrage on Mon, 23 Mar 2009 16:45:03 GMT]]></title><description><![CDATA[<p>unskilled schrieb:</p>
<blockquote>
<p>standardstil schrieb:</p>
<blockquote>
<p>mit dme neune standard geht das ja endlich im header</p>
</blockquote>
<p>Als ob das besser wäre -.-</p>
</blockquote>
<p>Ich habe mir in dem Punkt noch nicht den neuen Standard angeschaut, sehe hier aber kein schlechten Stil. Ansonsten ziehe ich aber Grundsätzlich die Initialisierungsliste vor.</p>
<p>volkard  schrieb:</p>
<blockquote>
<p>ich kenne leute, die machen eigentlich alles in initialisiererlisten. naja, manchmal wirds häßlich.</p>
</blockquote>
<p>Dann kennst du nun noch einen weiteren. Derzeit sehe ich keinen einzigen Grund die Initialisierungsliste (alleine schon aus Konsistenzgründen) nicht für alle Variablen zu verwenden. Hässlich wird das meiner Meinung nach nur wenn die Klasse zuviele Member besitzt (das ist dann aber eher ein Design-, und nicht ein Initialisierungsproblem).</p>
<p>cu André</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1684935</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1684935</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Mon, 23 Mar 2009 16:45:03 GMT</pubDate></item><item><title><![CDATA[Reply to Eine Stilfrage on Mon, 23 Mar 2009 16:48:39 GMT]]></title><description><![CDATA[<p>Initlisten sind schneller, weil der ganzen MeberVar Chunk per MemCopy in die Instanz kopiert wird. Das ist dann nur ein Copy-Befehl.</p>
<p>Wenn man alle Member einzeln initialisiert, dann wird pro Member einmal kopiert.</p>
<p>Initialisierungslisten verwendet man für Klassen, von der sehr viele Instanzen erzeugt werden. Weil der Scheiss so schwierig zu lesen ist, sollte man ihn nur verwenden, wenn nötig.</p>
<p>Typischer Anwendungsfall für Init-Listen: Vektor-Klassen in 3D Anwendungen. Davon hat man oft ein paar tausend Instanzen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1684938</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1684938</guid><dc:creator><![CDATA[_Peter_Lustig_]]></dc:creator><pubDate>Mon, 23 Mar 2009 16:48:39 GMT</pubDate></item><item><title><![CDATA[Reply to Eine Stilfrage on Mon, 23 Mar 2009 17:23:42 GMT]]></title><description><![CDATA[<p>Ich verwende sie immer. Der g++ hat 'ne Kompileroption -Weffc++, die warnt, wenn bestimmte Sachen nicht in der Initialisierungsliste des Konstruktors initialisiert werden. Zumal sind die meisten Anfaengerfehler (auch hier im Forum zu beobachten) meist falsche oder nicht initialisierte Variablen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1684946</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1684946</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Mon, 23 Mar 2009 17:23:42 GMT</pubDate></item><item><title><![CDATA[Reply to Eine Stilfrage on Mon, 23 Mar 2009 17:22:48 GMT]]></title><description><![CDATA[<p><em>Peter_Lustig</em> schrieb:</p>
<blockquote>
<p>Initlisten sind schneller, weil der ganzen MeberVar Chunk per MemCopy in die Instanz kopiert wird. Das ist dann nur ein Copy-Befehl.<br />
Wenn man alle Member einzeln initialisiert, dann wird pro Member einmal kopiert.</p>
</blockquote>
<p>wohl kaum.<br />
unterschiede hats nur, wenn die konstruktoren oder zuweisungsoperatoren teure dinge tun, wie bei std::string.<br />
attribute vom typ int oder double kannste drch initialisiererlisten nicht beschleunigen.<br />
entsprechend sind sie auch nur für sachen wie std::string notwendig und alle weitere ist kür.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1684955</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1684955</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Mon, 23 Mar 2009 17:22:48 GMT</pubDate></item><item><title><![CDATA[Reply to Eine Stilfrage on Mon, 23 Mar 2009 17:44:13 GMT]]></title><description><![CDATA[<p>Wie kommste denn darauf?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1684972</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1684972</guid><dc:creator><![CDATA[_Peter_Lustig_]]></dc:creator><pubDate>Mon, 23 Mar 2009 17:44:13 GMT</pubDate></item><item><title><![CDATA[Reply to Eine Stilfrage on Mon, 23 Mar 2009 17:54:22 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p><em>Peter_Lustig</em> schrieb:</p>
<blockquote>
<p>Initlisten sind schneller, weil der ganzen MeberVar Chunk per MemCopy in die Instanz kopiert wird. Das ist dann nur ein Copy-Befehl.<br />
Wenn man alle Member einzeln initialisiert, dann wird pro Member einmal kopiert.</p>
</blockquote>
<p>wohl kaum.<br />
unterschiede hats nur, wenn die konstruktoren oder zuweisungsoperatoren teure dinge tun, wie bei std::string.</p>
</blockquote>
<p>Es mag sein, das es bei integralen Datentypen kaum oder keinen Unterschied macht. Es ist aber meiner Meinung nach schlechter Stil etwas in einem Fall zu machen, in einem Anderen aber nicht. Zumal es zumindest bei mir die Wahrscheinlichkeit reduziert eine Variable zu vergessen (Ich versuche die Initialisierungsliste immer mit den Membern identisch zu halten, die otionale Warnung wie im gcc scheinbar möglich würde ich mir auch bei anderen Compilern wünschen).</p>
<p>Initialisierungslisten meiner Meinung nach zwar etwas, aber nicht wesentlich, komplizierter zu lesen.</p>
<p>cu André</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1684981</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1684981</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Mon, 23 Mar 2009 17:54:22 GMT</pubDate></item><item><title><![CDATA[Reply to Eine Stilfrage on Mon, 23 Mar 2009 18:11:54 GMT]]></title><description><![CDATA[<p>asc schrieb:</p>
<blockquote>
<p>Initialisierungslisten meiner Meinung nach zwar etwas, aber nicht wesentlich, komplizierter zu lesen.</p>
</blockquote>
<p>Wenn man die Member schön untereinander gliedert, finde ich das nicht mal weniger übersichtlich als Zuweisungen.</p>
<p>Aus meiner Sicht können Zuweisungen in Ausnahmefällen okay sein (wenn verpätete Initialisierung oder keine Initialisierung aus Performancegründen notwendig ist), aber für die meisten Member sollte man eigentlich Initialisierungslisten verwenden. Zumal es für gewisse Fälle gar keine Alternative gibt.</p>
<p>standardstil schrieb:</p>
<blockquote>
<p>was ist daran schlechter?</p>
</blockquote>
<p>Das finde ich total schlimm. Keine Ahnung, was sich die Standard-Leute dabei gedacht haben. Als ob es nicht schon genügend Inkonsistenzen und für jedes Problem mehrere sprachliche Ansätze gäbe - nein, man muss jetzt auch noch Member direkt bei der Deklaration initialisieren können. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1684997</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1684997</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Mon, 23 Mar 2009 18:11:54 GMT</pubDate></item><item><title><![CDATA[Reply to Eine Stilfrage on Mon, 23 Mar 2009 18:12:54 GMT]]></title><description><![CDATA[<p>Habs nachgemessen. Initlisten sind im Release und im Debug Built bei VC 9 (WinXp Professional 2 GB RAM) schneller. Auch bei integralen Datentypen. Der Speedgain betrug bei meinem Benchmark ca. 10% bei diesen 5 Member Vars</p>
<pre><code>int      m_a;
    double   m_b;
    int      m_c;
    float    m_d;
    unsigned m_e;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1685000</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1685000</guid><dc:creator><![CDATA[_PeterLustig_]]></dc:creator><pubDate>Mon, 23 Mar 2009 18:12:54 GMT</pubDate></item><item><title><![CDATA[Reply to Eine Stilfrage on Mon, 23 Mar 2009 18:20:10 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>standardstil schrieb:</p>
<blockquote>
<p>was ist daran schlechter?</p>
</blockquote>
<p>Das finde ich total schlimm. Keine Ahnung, was sich die Standard-Leute dabei gedacht haben. Als ob es nicht schon genügend Inkonsistenzen und für jedes Problem mehrere sprachliche Ansätze gäbe - nein, man muss jetzt auch noch Member direkt bei der Deklaration initialisieren können. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
</blockquote>
<p>Stimmt, jetzt könnte man diese komischen initialisierungslisten weg werfen, aber dann würden die alten programme nicht mehr funktionieren. Wenn Member schon immer direkt bei der Deklaration initialisiert worden wären und jetzt Initialisierungslisten dazu kommen würden, dann würden alle Initialisierungslisten dämlich finden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1685009</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1685009</guid><dc:creator><![CDATA[standardstil]]></dc:creator><pubDate>Mon, 23 Mar 2009 18:20:10 GMT</pubDate></item><item><title><![CDATA[Reply to Eine Stilfrage on Mon, 23 Mar 2009 18:26:27 GMT]]></title><description><![CDATA[<p>standardstil schrieb:</p>
<blockquote>
<p>Wenn Member schon immer direkt bei der Deklaration initialisiert worden wären und jetzt Initialisierungslisten dazu kommen würden, dann würden alle Initialisierungslisten dämlich finden.</p>
</blockquote>
<p>Dir ist aber schon bewusst, dass es mehrere Möglichkeiten gibt, Member einer Klasse zu initialisieren?</p>
<p>Von daher finde ich die &quot;einheitliche&quot; Initialisierung bei der Deklaration alles andere als gut. Sobald man eine komplexere Klasse hat, hat diese auch mehrere Konstruktoren. Und sobald dies der Fall ist, ist die Initialisierung gleich in der Klassendefinition nicht mehr so einheitlich. Schlussendlich läuft es darauf hinaus, dass gewisse Member in Konstruktoren, gewisse in der Klasse initialisiert werden. Sehr konsistent.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1685013</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1685013</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Mon, 23 Mar 2009 18:26:27 GMT</pubDate></item><item><title><![CDATA[Reply to Eine Stilfrage on Mon, 23 Mar 2009 18:40:59 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>standardstil schrieb:</p>
<blockquote>
<p>Wenn Member schon immer direkt bei der Deklaration initialisiert worden wären und jetzt Initialisierungslisten dazu kommen würden, dann würden alle Initialisierungslisten dämlich finden.</p>
</blockquote>
<p>Dir ist aber schon bewusst, dass es mehrere Möglichkeiten gibt, Member einer Klasse zu initialisieren?</p>
<p>Von daher finde ich die &quot;einheitliche&quot; Initialisierung bei der Deklaration alles andere als gut. Sobald man eine komplexere Klasse hat, hat diese auch mehrere Konstruktoren. Und sobald dies der Fall ist, ist die Initialisierung gleich in der Klassendefinition nicht mehr so einheitlich. Schlussendlich läuft es darauf hinaus, dass gewisse Member in Konstruktoren, gewisse in der Klasse initialisiert werden. Sehr konsistent.</p>
</blockquote>
<p>na, wenn du meinst...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1685020</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1685020</guid><dc:creator><![CDATA[standardstil]]></dc:creator><pubDate>Mon, 23 Mar 2009 18:40:59 GMT</pubDate></item><item><title><![CDATA[Reply to Eine Stilfrage on Mon, 23 Mar 2009 19:18:53 GMT]]></title><description><![CDATA[<p><em>PeterLustig</em> schrieb:</p>
<blockquote>
<p>Auch bei integralen Datentypen. Der Speedgain betrug bei meinem Benchmark ca. 10%</p>
</blockquote>
<p>aha. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /><br />
meine info war aus einem buch. habs geglaubt, ohne selber zu messen.<br />
ok, dann werd ich wohl mal vermehrt zu initialisiererlisten greifen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1685034</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1685034</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Mon, 23 Mar 2009 19:18:53 GMT</pubDate></item><item><title><![CDATA[Reply to Eine Stilfrage on Mon, 23 Mar 2009 20:22:01 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>aha. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /><br />
meine info war aus einem buch. habs geglaubt, ohne selber zu messen.<br />
ok, dann werd ich wohl mal vermehrt zu initialisiererlisten greifen.</p>
</blockquote>
<p>Und das passiert Jemanden der aufschreit, wenn einer von vorzeitigen Optimierungen abrät... ;p</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1685054</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1685054</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Mon, 23 Mar 2009 20:22:01 GMT</pubDate></item><item><title><![CDATA[Reply to Eine Stilfrage on Mon, 23 Mar 2009 20:46:53 GMT]]></title><description><![CDATA[<p>ich hab da grad was blödes:</p>
<pre><code class="language-cpp">class Console{
	private:
	Size sizeX,sizeY;
	CHAR_INFO* bufferBegin,bufferEnd;
	CHAR_INFO* lineBegin,lineEnd;
	CHAR_INFO* pos;
	public:
	Console(){
		HANDLE hConsole=GetStdHandle(STD_OUTPUT_HANDLE);
		CONSOLE_SCREEN_BUFFER_INFO csbi;
		GetConsoleScreenBufferInfo(hConsole,&amp;csbi);
		sizeX=csbi.dwSize.X;
		sizeY=csbi.dwSize.Y;
		bufferBegin=new CHAR_INFO[sizeY*sizeX];
		bufferEnd=bufferBegin+sizeY*sizeX;
		lineBegin=bufferBegin;
		lineEnd=lineBegin+sizeX;
		pos=lineBegin;
		//TODO: aktuellen consoleninhalt in den buffer kopieren
		//cursorposition aus csbi lesen und pos und line* danach 
		//setzen
	}
	void carriageReturn(){
		pos=lineBegin;
	}
	void newLine(){
		if(lineEnd==bufferEnd){
			lineBegin=bufferBegin;
			lineEnd=lineBegin+sizeX;
			pos-=(sizeY*sizeX-sizeX);
		}
		else{
			lineEnd+=sizeX;
			lineBegin=lineEnd;
			pos+=sizeX;
		}
		for(CHAR_INFO* p=lineBegin;p!=lineEnd;++p){
			*p-&gt;UnicodeChar=' ';
			*p-&gt;Attributes=7;
		}
	}
	void carriageReturnNewLine(){
		carriageReturn();
		newLine();
	}
	void writeSpecialChar(char ch){
	}
	void writePrintableChar(char ch){
		*pos=ch;
		++pos;
		if(pos==lineEnd)
			newLine();
	}
	void put(char ch){
		if(ch&lt;16)
			writeSpecialChar(ch);
		else
			writePrintableChar(ch);
	}
};
</code></pre>
<p>ist alles noch pseudocode, ich experimentiere, wie sich code für eine console anfühlen sollte.</p>
<p>aber wie mach ich den konstruktor so richtig initialisiererlistenlastig? mir scheint, das würde der ganzen angelegenheit die beine brechen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1685071</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1685071</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Mon, 23 Mar 2009 20:46:53 GMT</pubDate></item><item><title><![CDATA[Reply to Eine Stilfrage on Mon, 23 Mar 2009 21:59:23 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>ich hab da grad was blödes:<br />
...<br />
aber wie mach ich den konstruktor so richtig initialisiererlistenlastig? mir scheint, das würde der ganzen angelegenheit die beine brechen.</p>
</blockquote>
<p>C-Code in C++ zu wandeln ist nun einmal nicht immer sinnvoll möglich.</p>
<p>Normalerweise initialisiere ich bei ähnlichen Fällen (aber bei einzelnen Werten) über Rückgabewerte von statische Methoden, da die Initialisierung in so einen Fall eh schon ein Thema für sich ist. Bzw. Kapsel dies in eigene RAII-Objekte.</p>
<p>Ja, eine einfache Lösung fällt mir hier nicht ein, aber ich muss gestehen das ich zu 95+% mit C++ Schnittstellen hantiere (oder mit Wrappern um eben solche).</p>
<p>cu André</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1685112</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1685112</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Mon, 23 Mar 2009 21:59:23 GMT</pubDate></item><item><title><![CDATA[Reply to Eine Stilfrage on Mon, 23 Mar 2009 22:34:00 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/106">@volkard</a>,<br />
Kann es überhaupt mehrere Objekt von <code>Console</code> geben? Wäre das nicht perfekt für ein Singleton mit Factory Pattern. In der Fabrikmethode holst du dir ein <code>CONSOLE_SCREEN_BUFFER_INFO</code> und übergibst dieses an den Konstruktor von <code>Console</code> . Dann kann alles in der Initialisierungsliste ausgeführt werden. Wobei man natürlich die Reihenfolge der Initialisierung beachten muss.</p>
<p>Allerdings lagere ich eigentlich immer gerne Speicherverwaltungsaufgaben aus der Initialisierungsliste raus. Also ein <code>new</code> erfolgt bei mir immer im Konstruktorrumpf und nicht in der Initialisierunsliste.</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1685123</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1685123</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Mon, 23 Mar 2009 22:34:00 GMT</pubDate></item><item><title><![CDATA[Reply to Eine Stilfrage on Mon, 23 Mar 2009 22:54:12 GMT]]></title><description><![CDATA[<p>Dravere schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/106">@volkard</a>,<br />
Kann es überhaupt mehrere Objekt von <code>Console</code> geben?</p>
</blockquote>
<p>bevor deine factory im spiel war, gab es keinen grund dagegen. vielleicht ist es ganz angenehm, ein zweites konsolenfenster für debug-ausgaben oder cerr aufzumachen.</p>
<blockquote>
<p>Wäre das nicht perfekt für ein Singleton mit Factory Pattern. In der Fabrikmethode holst du dir ein <code>CONSOLE_SCREEN_BUFFER_INFO</code> und übergibst dieses an den Konstruktor von <code>Console</code> . Dann kann alles in der Initialisierungsliste ausgeführt werden. Wobei man natürlich die Reihenfolge der Initialisierung beachten muss.</p>
</blockquote>
<p>wenn das nur geschieht, um die initialisiererliste benutzen zu können, ist das nicht ok, finde ich.</p>
<blockquote>
<p>Allerdings lagere ich eigentlich immer gerne Speicherverwaltungsaufgaben aus der Initialisierungsliste raus. Also ein <code>new</code> erfolgt bei mir immer im Konstruktorrumpf und nicht in der Initialisierunsliste.</p>
</blockquote>
<p>jo, geht mir auch so.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1685126</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1685126</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Mon, 23 Mar 2009 22:54:12 GMT</pubDate></item><item><title><![CDATA[Reply to Eine Stilfrage on Mon, 23 Mar 2009 23:20:24 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>wenn das nur geschieht, um die initialisiererliste benutzen zu können, ist das nicht ok, finde ich.</p>
</blockquote>
<p>Naja, die Frage ist eher, ob der Code oberhalb der Zeile 12 im Konstruktor wirklich zu <code>Console</code> gehören sollte. Ist das die Aufgabe vom Konstruktor von Console?<br />
Wie du selber gesagt hast, wenn jemand die Konsole über <code>STD_ERROR_HANDLE</code> laufen lassen möchte, wäre es besser, wenn der Konstruktor gleich ein gültiges <code>CONSOLE_SCREEN_BUFFER_INFO</code> Objekt erwarten würde.</p>
<p>Das erstellen eines gültigen <code>CONSOLE_SCREEN_BUFFER_INFO</code> Objektes ist meiner Meinung nach einfach nicht die Aufgabe des Konstruktors von <code>Console</code> .</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1685134</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1685134</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Mon, 23 Mar 2009 23:20:24 GMT</pubDate></item><item><title><![CDATA[Reply to Eine Stilfrage on Tue, 24 Mar 2009 00:12:12 GMT]]></title><description><![CDATA[<p>Dravere schrieb:</p>
<blockquote>
<p>volkard schrieb:</p>
<blockquote>
<p>wenn das nur geschieht, um die initialisiererliste benutzen zu können, ist das nicht ok, finde ich.</p>
</blockquote>
<p>Naja, die Frage ist eher, ob der Code oberhalb der Zeile 12 im Konstruktor wirklich zu <code>Console</code> gehören sollte. Ist das die Aufgabe vom Konstruktor von Console?<br />
Wie du selber gesagt hast, wenn jemand die Konsole über <code>STD_ERROR_HANDLE</code> laufen lassen möchte, wäre es besser, wenn der Konstruktor gleich ein gültiges <code>CONSOLE_SCREEN_BUFFER_INFO</code> Objekt erwarten würde.</p>
<p>Das erstellen eines gültigen <code>CONSOLE_SCREEN_BUFFER_INFO</code> Objektes ist meiner Meinung nach einfach nicht die Aufgabe des Konstruktors von <code>Console</code> .</p>
<p>Grüssli</p>
</blockquote>
<p>ich darf keine lokalen variablen anlegen. hmm.<br />
die frage ist also, ob innerhalb eines konstruktors gerechnet werden darf!</p>
<p>da führt mich doch sofort zu</p>
<pre><code class="language-cpp">HashTable::HashTable(size_t size)
:keys(nextPrimeTwin(size/4*5))
,values(nextPrimeTwin(size/4*5))
{
}
</code></pre>
<p>das ist eine hashtable, deren interne größe ein primzahlenzwilling sein soll, weil das recht gute aussichten auf kollissionsarmut bietet. außerdem sollen keys und values in getrennten speicherbereichen liegen, weil die keys sehr klein und die values sehr lahm sind. bei &lt;=80% füllstand habe ich beste chancen, unter zwei key-zugriffen zu bleiben, und bei tollen keys habe ich beste aussichten, bei ungefähr einem value-zugriff zu bleiben. außerdem ist die berechnung des nächsten primzahlenzwillings eine sehr teure angelegenheit. die members keys und values sind vector-ähnliche klassen, die im konstuktor ihr größe haben wollen. ich möchte keine andere hashtable-struktur wählen nur weil diese hier mich bei den initialisiererlisten verwirrt.</p>
<p>obiger code ist suboptimal. weg damit.</p>
<pre><code class="language-cpp">HashTable::HashTable(size_t size)
{
   size_t s=nextPrimeTwin(size/4*5);
   keys=Array&lt;KEY&gt;(s);
   values=Array&lt;VALUE&gt;(s);
}
</code></pre>
<p>naja, auch kacke.</p>
<p>den benutzer zu zwingen,</p>
<pre><code class="language-cpp">HashTable&lt;...,...&gt; h(nextPrimeTwin(10000));
</code></pre>
<p>zu benutzen, fällt auch in die kategogie M.I.S.T..</p>
<p>also</p>
<pre><code class="language-cpp">HashTable::HashTable(size_t size)
:realHashTable(nextPrimeTwin(size/4*5))
{
}
</code></pre>
<p>naja, bedenklich, nur zu diesem zweck ne klasse aufzumachen.</p>
<pre><code class="language-cpp">class PrimeTwin{
...
   PrimeTwin(size_t n)
   size_t getValue()
...
HashTable::HashTable(PrimeTwin size)
:keys(size.getValue())
,values(size.getValue())
</code></pre>
<p>ich glaub', ich steh im wald.</p>
<p>das ist anscheinend kein problem, das mit ordentlichem design weggemacht werden kann. es gibt keinen königsweg. sonst hätte schon längst einer eine sprache erfunden, die alles richtig macht, und sie nach einer insel benannt, fürchte ich.</p>
<p>das konzept mit den initialisiererlisten ist ein wenig fürn popo. warum soll ich nicht die memberkonstruktoren aufrufen dürfen, wann ich mag? es würde doch reichen, daß ich bis zum ende meineskostruktors alle aufgerufen haben muß. und wenn ich die rehenfolge von der deklarationsreihenfolge abweichen lasse, muß ich halt drauf achten, daß das auch mit dem destruktor kompatibel ist, was fast immer der fall ist, weil die members sich gar nicht gegenseitig kennen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1685141</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1685141</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Tue, 24 Mar 2009 00:12:12 GMT</pubDate></item></channel></rss>