<?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[Basisinitialisierer für Struktur?]]></title><description><![CDATA[<p>Hey!</p>
<p>Normalerweise kann man ja alle Elemente einer Struktur so auf 0 setzen:</p>
<pre><code class="language-cpp">WNDCLASS windowClass = { 0 };
</code></pre>
<p>Aber wie geht das mit dem Elementinitialisierer?</p>
<pre><code class="language-cpp">Window::Window() : windowClass({ 0 })
{
    ;
}
</code></pre>
<p>Haut nicht hin...</p>
<p>Danke!<br />
MfG</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/196276/basisinitialisierer-für-struktur</link><generator>RSS for Node</generator><lastBuildDate>Wed, 30 Sep 2026 11:36:02 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/196276.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 27 Oct 2007 17:37:56 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Basisinitialisierer für Struktur? on Sat, 27 Oct 2007 17:37:56 GMT]]></title><description><![CDATA[<p>Hey!</p>
<p>Normalerweise kann man ja alle Elemente einer Struktur so auf 0 setzen:</p>
<pre><code class="language-cpp">WNDCLASS windowClass = { 0 };
</code></pre>
<p>Aber wie geht das mit dem Elementinitialisierer?</p>
<pre><code class="language-cpp">Window::Window() : windowClass({ 0 })
{
    ;
}
</code></pre>
<p>Haut nicht hin...</p>
<p>Danke!<br />
MfG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1393192</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1393192</guid><dc:creator><![CDATA[ceplusplus@loggedoff]]></dc:creator><pubDate>Sat, 27 Oct 2007 17:37:56 GMT</pubDate></item><item><title><![CDATA[Reply to Basisinitialisierer für Struktur? on Sat, 27 Oct 2007 18:19:22 GMT]]></title><description><![CDATA[<p>ceplusplus@loggedoff schrieb:</p>
<blockquote>
<p>Hey!</p>
<p>Normalerweise kann man ja alle Elemente einer Struktur so auf 0 setzen:</p>
<pre><code class="language-cpp">WNDCLASS windowClass = { 0 };
</code></pre>
</blockquote>
<p>Genausgenommen ist die allgemeine Form in C++</p>
<pre><code class="language-cpp">WNDCLASS windowClass = {};
</code></pre>
<p>also ohne die 0. In C ist das nicht möglich - dort existieren einerseits keine leeren Strukturen und andererseits ist 0 dort immer ein gültiger Initialisierer (ggf. durch Brace-eliminierung, wenn das erste Element selbst ein Aggregat ist) . Eine leere Struktur oder eine Struktur deren erstes Element eine Klasse, die nicht mit 0 initialisiert werden kann, ist, kann dagegen nicht mit {0} initialisiert werden - so etwas ist aber auch nur in C++ möglich.</p>
<blockquote>
<p>Aber wie geht das mit dem Elementinitialisierer?</p>
<pre><code class="language-cpp">Window::Window() : windowClass({ 0 })
{
    ;
}
</code></pre>
<p>Haut nicht hin...</p>
<p>Danke!<br />
MfG</p>
</blockquote>
<p>Der Defaultkonstruktor wird für solche Klassen automatisch generiert.</p>
<pre><code class="language-cpp">Window::Window() : windowClass()
{}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1393208</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1393208</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Sat, 27 Oct 2007 18:19:22 GMT</pubDate></item><item><title><![CDATA[Reply to Basisinitialisierer für Struktur? on Sat, 27 Oct 2007 18:30:44 GMT]]></title><description><![CDATA[<p>Arrays und Strukturen lassen sich nicht in der Initialisierungsliste initialisieren, d.h. entweder du verwendest memset(...) (nicht sehr schön, da zu C lastig) oder aber du schreibst dir eine Wrapperklasse um WNDCLASS, welche die Initialisierung durchführt (Member für Member).</p>
<p>Mir ist noch eine Möglichkeit eingefallen:<br />
du erzeugst dir eine statische Variable vom Typ WNDCLASS und initialisierst diese mit { 0 } und im Konstruktor kopierst du einfach diese Variable:</p>
<pre><code class="language-cpp">namespace // anonymer namespace ist besser als static
          // (im C++ - Standard als &quot;deprecated&quot; bezeichnet)
{
  WNDCLASS st_windowClass = { 0 };
}

Window::Window() : windowClass(st_windowClass)
{
}
</code></pre>
<p>P.S.</p>
<blockquote>
<p>Der Defaultkonstruktor wird für solche Klassen automatisch generiert.</p>
</blockquote>
<p>WNDCLASS ist ja eine einfache C-Struktur (auch wenn sie anders heißt <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="😃"
    /> ), d.h. die Elemente (meist Zeiger und int/long) werden nicht automatisch auf 0 gesetzt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1393217</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1393217</guid><dc:creator><![CDATA[Th]]></dc:creator><pubDate>Sat, 27 Oct 2007 18:30:44 GMT</pubDate></item><item><title><![CDATA[Reply to Basisinitialisierer für Struktur? on Sat, 27 Oct 2007 18:44:58 GMT]]></title><description><![CDATA[<p>Also macht</p>
<pre><code class="language-cpp">Window::Window() : windowClass()
{
	;
}
</code></pre>
<p>nicht das gewünschte?<br />
Würd ich dann schade finden, dass das nicht geht.</p>
<p>MfG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1393226</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1393226</guid><dc:creator><![CDATA[ceplusplus@loggedoff]]></dc:creator><pubDate>Sat, 27 Oct 2007 18:44:58 GMT</pubDate></item><item><title><![CDATA[Reply to Basisinitialisierer für Struktur? on Sat, 27 Oct 2007 18:45:14 GMT]]></title><description><![CDATA[<p>Th schrieb:</p>
<blockquote>
<p>P.S.</p>
<blockquote>
<p>Der Defaultkonstruktor wird für solche Klassen automatisch generiert.</p>
</blockquote>
<p>WNDCLASS ist ja eine einfache C-Struktur (auch wenn sie anders heißt <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="😃"
    /> ), d.h. die Elemente (meist Zeiger und int/long) werden nicht automatisch auf 0 gesetzt.</p>
</blockquote>
<p>C++ kennt keine C-Strukturen - allerdings sind solche POD-Klassen layout-kompatibel zu den entsprechenden C-Strukturen. So oder so - in C++ sind das Klassen, die zwei implizit deklarierte Konstruktoren (Default- und Copy-ctor) haben. Dieser implizit deklarierte Defaultkonstruktor (sofern er erzeugt werden kann, was bei nicht-statische const-Membern und Referenzen nicht der Fall ist), defaultkonstruiert alle Member - bez. genauer value-initialisiert. Value-Initialisierung für Skalare ist aber nichts anderes als die Initialisierung mit 0.</p>
<blockquote>
<p>Arrays und Strukturen lassen sich nicht in der Initialisierungsliste initialisieren</p>
</blockquote>
<p>Das trifft in dieser Allgemeinheit nicht zu. Defaultkonstruktion ist immer möglich, wenn ein Defaultkonstruktor existiert und aufrufbar ist. Insbesondere im Falle von einfachen POD-Strukturen ist die Lösung simpel: mittels einer Funktion, die einen entsprechenden Konstruktor ersetzt. Das ist im Allgemeinen besser als die Verwendung einer statischen Variable.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1393227</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1393227</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Sat, 27 Oct 2007 18:45:14 GMT</pubDate></item><item><title><![CDATA[Reply to Basisinitialisierer für Struktur? on Sat, 27 Oct 2007 19:12:00 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">Window::Window() : windowClass() 
{ 
    ; 
}
</code></pre>
<p>Scheint zu funktionieren, aber warum muss man das überhaupt schreiben? Wird nicht schon beim erstellen von windowClass als member der Default-Ctor aufgerufen?</p>
<p>MfG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1393247</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1393247</guid><dc:creator><![CDATA[ceplusplus@loggedoff]]></dc:creator><pubDate>Sat, 27 Oct 2007 19:12:00 GMT</pubDate></item><item><title><![CDATA[Reply to Basisinitialisierer für Struktur? on Mon, 29 Oct 2007 13:10:13 GMT]]></title><description><![CDATA[<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1394101</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1394101</guid><dc:creator><![CDATA[ceplusplus@loggedoff]]></dc:creator><pubDate>Mon, 29 Oct 2007 13:10:13 GMT</pubDate></item><item><title><![CDATA[Reply to Basisinitialisierer für Struktur? on Mon, 29 Oct 2007 13:27:36 GMT]]></title><description><![CDATA[<p>Ja, normalerweise mußt du den Default-Ctor nicht explizit aufführen - der wird sowieso ausgeführt, wenn du nichts naderes sagst. Aber es schadet niemandem, wenn du ihn dort nennst (und wenn die Basisklasse keinen Default-Ctor hat, <strong>mußt</strong> du den richtigen Ctor angeben).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1394107</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1394107</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Mon, 29 Oct 2007 13:27:36 GMT</pubDate></item><item><title><![CDATA[Reply to Basisinitialisierer für Struktur? on Mon, 29 Oct 2007 13:28:40 GMT]]></title><description><![CDATA[<p>ceplusplus@loggedoff schrieb:</p>
<blockquote>
<p>Scheint zu funktionieren, aber warum muss man das überhaupt schreiben? Wird nicht schon beim erstellen von windowClass als member der Default-Ctor aufgerufen?</p>
</blockquote>
<p>ich würde mal vermuten, dass bei PODs der default-ctor nur erzeugt wird, wenn er explizit angefordert wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1394109</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1394109</guid><dc:creator><![CDATA[cpt. obvious]]></dc:creator><pubDate>Mon, 29 Oct 2007 13:28:40 GMT</pubDate></item></channel></rss>