<?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[Initialisieren von Variablen]]></title><description><![CDATA[<p>Hallo,<br />
ich würde gerne wissen, welche Methode die Beste ist, Variablen beim Erstellen zu &quot;leeren&quot;.<br />
Bisher habe ich folgendes gemacht:</p>
<pre><code class="language-cpp">struct STest {
	int a, b, c;
};

int main() {
	STest t;
	ZeroMemory(&amp;t, sizeof(t));

    return 0;
}

int main() {
	STest t = { 0, 0, 0 };

    return 0;
}
</code></pre>
<p>Welche der beiden Methoden ist schneller? (Im Beispiel ist es vielleicht egal, aber bei größeren Strukturen nicht)<br />
MfG,<br />
Max</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/218573/initialisieren-von-variablen</link><generator>RSS for Node</generator><lastBuildDate>Fri, 09 Oct 2026 00:37:32 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/218573.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 22 Jul 2008 13:57:52 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Initialisieren von Variablen on Tue, 22 Jul 2008 13:58:44 GMT]]></title><description><![CDATA[<p>Hallo,<br />
ich würde gerne wissen, welche Methode die Beste ist, Variablen beim Erstellen zu &quot;leeren&quot;.<br />
Bisher habe ich folgendes gemacht:</p>
<pre><code class="language-cpp">struct STest {
	int a, b, c;
};

int main() {
	STest t;
	ZeroMemory(&amp;t, sizeof(t));

    return 0;
}

int main() {
	STest t = { 0, 0, 0 };

    return 0;
}
</code></pre>
<p>Welche der beiden Methoden ist schneller? (Im Beispiel ist es vielleicht egal, aber bei größeren Strukturen nicht)<br />
MfG,<br />
Max</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1551721</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1551721</guid><dc:creator><![CDATA[ripmav]]></dc:creator><pubDate>Tue, 22 Jul 2008 13:58:44 GMT</pubDate></item><item><title><![CDATA[Reply to Initialisieren von Variablen on Tue, 22 Jul 2008 13:59:33 GMT]]></title><description><![CDATA[<p>Ersteres benutzt eine Methode die nicht zum Iso-Standard gehört und somit bleibt nur noch eine Variante übrig.</p>
<p>Und glaube mir es spielt keine Rolle.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1551724</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1551724</guid><dc:creator><![CDATA[Iso-Standard]]></dc:creator><pubDate>Tue, 22 Jul 2008 13:59:33 GMT</pubDate></item><item><title><![CDATA[Reply to Initialisieren von Variablen on Tue, 22 Jul 2008 14:02:16 GMT]]></title><description><![CDATA[<p>Was macht ZeroMemoryß!?!?!?!??!?!?!?!?!?!??!?!?!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1551727</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1551727</guid><dc:creator><![CDATA[was soll das]]></dc:creator><pubDate>Tue, 22 Jul 2008 14:02:16 GMT</pubDate></item><item><title><![CDATA[Reply to Initialisieren von Variablen on Tue, 22 Jul 2008 14:09:50 GMT]]></title><description><![CDATA[<p>Benutze einfach einen Default-Konstruktor:</p>
<pre><code class="language-cpp">struct STest
{
    int a, b, c;

    STest() : a(0), b(0), c(0) /* (Initialisierungsliste) */ { }
};

int main()
    {
        STest t; // Und somit sind alle Attribute definitiv 0
    }
</code></pre>
<p>Grüße.. Heiko</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1551730</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1551730</guid><dc:creator><![CDATA[bwbg]]></dc:creator><pubDate>Tue, 22 Jul 2008 14:09:50 GMT</pubDate></item><item><title><![CDATA[Reply to Initialisieren von Variablen on Tue, 22 Jul 2008 14:19:24 GMT]]></title><description><![CDATA[<blockquote>
<p>Ersteres benutzt eine Methode die nicht zum Iso-Standard gehört und somit bleibt nur noch eine Variante übrig.</p>
</blockquote>
<p>Ups, hätte ins WinAPI Forum gemusst.. sry <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/16744">@bwbg</a>:<br />
Das ist natürlich am besten! Danke <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1551737</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1551737</guid><dc:creator><![CDATA[ripmav]]></dc:creator><pubDate>Tue, 22 Jul 2008 14:19:24 GMT</pubDate></item><item><title><![CDATA[Reply to Initialisieren von Variablen on Tue, 22 Jul 2008 14:22:02 GMT]]></title><description><![CDATA[<p>Oder alternativ:</p>
<pre><code class="language-cpp">STest t = {};
</code></pre>
<p>Stell die Frage nochmal, wenn dir ein Profiler exakt diese Stelle als No.1 Flaschenhals in deiner Anwendung anzeigt. Davor nimm am besten eine einfache, standardkonforme, lesbare, für jeden Menschen verständliche Form.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1551740</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1551740</guid><dc:creator><![CDATA[7H3 N4C3R]]></dc:creator><pubDate>Tue, 22 Jul 2008 14:22:02 GMT</pubDate></item><item><title><![CDATA[Reply to Initialisieren von Variablen on Tue, 22 Jul 2008 14:39:12 GMT]]></title><description><![CDATA[<p>[quote=&quot;ripmav&quot;]</p>
<blockquote>
<p>Ersteres benutzt eine Methode die nicht zum Iso-Standard gehört und somit bleibt nur noch eine Variante übrig.</p>
</blockquote>
<p>Ups, hätte ins WinAPI Forum gemusst.. sry <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
<p>[quote]</p>
<p>Das hat mit WinAPI an sich nix zu tun.<br />
ZeroMemory ist nix anderes als ein Makro:<br />
#define ZeroMemory(ptr, size) memset(ptr, 0, size)<br />
Wrnn schon, dann ins ANSI C Forum <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_tongue"
      title=":P"
      alt="😛"
    /><br />
lg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1551750</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1551750</guid><dc:creator><![CDATA[Script0r]]></dc:creator><pubDate>Tue, 22 Jul 2008 14:39:12 GMT</pubDate></item><item><title><![CDATA[Reply to Initialisieren von Variablen on Tue, 22 Jul 2008 15:34:56 GMT]]></title><description><![CDATA[<p>ripmav schrieb:</p>
<blockquote>
<p>ich würde gerne wissen, welche Methode die Beste ist, Variablen beim Erstellen zu &quot;leeren&quot;.</p>
</blockquote>
<p>Hallo Max,</p>
<p>Eine Variable kann man nicht 'leeren'; es steht immer etwas darin, z.B. der Wert 0. Was Du meinst nennt man initialisieren. Dafür gibt es in C++ die sogenannte Initialisierungsliste. Dabei werden die Variablen der Struktur beim Anlegen der Struktur unmittelbar initialisiert.</p>
<pre><code class="language-cpp">struct STest {
    STest()
        : a(0), b(0), c(0)
    {}
    int a, b, c;
};

int main() {
    STest t;    // 't' ist fertig initialisiert
    return 0;
}
</code></pre>
<p>Im Sinne von C++ ist dies die 'beste' Methode - wahrscheinlich auch die schnellste, da es dem Compiler überlassen wird, die Variablen zu belegen. Es ist unwahrscheinlich, dass irgendetwas 'handmade' schneller ist.<br />
Eine Initialisierungsliste ist gerade bei 'größeren Objekten' wärmstens zu empfehlen. (siehe auch Scott Meyers; <a href="http://www.amazon.de/Effektiv-programmieren-M%C3%B6glichkeiten-Verbesserung-Programme/dp/3827313058/ref=sr_1_5?ie=UTF8&amp;s=books&amp;qid=1216740706&amp;sr=8-5" rel="nofollow">Effektiv C++ programmieren</a>; Item 12)</p>
<p>Gruß<br />
Werner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1551783</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1551783</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Tue, 22 Jul 2008 15:34:56 GMT</pubDate></item><item><title><![CDATA[Reply to Initialisieren von Variablen on Tue, 22 Jul 2008 18:50:15 GMT]]></title><description><![CDATA[<p>Halb OT</p>
<p>Das Ganze lässt sich natürlich noch etwas flexibler gestalten:</p>
<pre><code class="language-cpp">struct STest
{
    int a, b, c;

    STest(int pa = 0, int pb = 0, int pc = 0) /* (Standardwerte) */
        : a(pa), b(pb), c(pc) /* (Initialisierungsliste) */
        { }
};

int main()
    {
        STest t; // Und somit sind alle Attribute definitiv 0
        STest u(1, 2, 3); // Fertig initialisiert mit Werten.
    }
</code></pre>
<p>Grüße... Heiko</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1551915</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1551915</guid><dc:creator><![CDATA[bwbg]]></dc:creator><pubDate>Tue, 22 Jul 2008 18:50:15 GMT</pubDate></item><item><title><![CDATA[Reply to Initialisieren von Variablen on Tue, 22 Jul 2008 22:19:19 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/16744">@bwbg</a>: klassischer Fall von &quot;explicit&quot; vergessen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/15062">@ripmav</a>: Beide Versionen sollten, einen guten, optimierenden Compiler vorausgesetzt, etwa gleich schnell sein. Auch bei grösseren Strukturen. Allegmein solltest du dir über sowas aber keine Gedanken machen.</p>
<p>premature optimization is the root of all evil in programming.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1552024</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1552024</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Tue, 22 Jul 2008 22:19:19 GMT</pubDate></item><item><title><![CDATA[Reply to Initialisieren von Variablen on Wed, 23 Jul 2008 06:53:19 GMT]]></title><description><![CDATA[<p><em><strong>voll OT</strong></em></p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/16744">@bwbg</a>: klassischer Fall von &quot;explicit&quot; vergessen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
</blockquote>
<p>Du wirst lachen. Bis vor 5 Minuten kannte ich das Schlüsselwort noch gar nicht. Liegt wahrscheinlich auch daran, dass ich bisher nie in die Verlegenheit kam, etwas derartiges nutzen zu müssen.</p>
<p>Nach den Beschreibungen scheint es aber auch eine recht nützliche Sache zu sein.</p>
<pre><code class="language-cpp">struct STest
{
    int a, b, c;

    explicit
    STest(int pa = 0, int pb = 0, int pc = 0) /* (Standardwerte) */
        : a(pa), b(pb), c(pc) /* (Initialisierungsliste) */
        { }
};
</code></pre>
<pre><code class="language-cpp">STest s; // Konstrukturaufruf mit Standwardwerten
STest t(1, 2, 3); // Expliziter Konstruktoraufruf
STest u(1, 2); // Dito
STest v = 1; // Fehler: Mit &quot;explicit&quot; nicht __mehr__ möglich

// Ohne &quot;explicit&quot; würde 'STest v = 1' implizit umgewandelt in
//  'STest v = STest(1)'
</code></pre>
<p>Wieder was gelernt.</p>
<p>Es ist natürlich wieder fallabhängig. Bei einer Klasse, welche Komplexe Zahlen repräsentiert, ist das &quot;explicit&quot;-Schlüsselwort bei einem Konstruktor a la '<em>Complex(double const&amp; real = 0.0, double const&amp; imaginary = 0.0)</em>' wenig sinnvoll, da hier 'Complex c = 1.0' eine &quot;normale&quot; reelle Zahl bzw. c = 1 + 0i definieren kann.</p>
<p>Grüße... Heiko</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1552124</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1552124</guid><dc:creator><![CDATA[bwbg]]></dc:creator><pubDate>Wed, 23 Jul 2008 06:53:19 GMT</pubDate></item><item><title><![CDATA[Reply to Initialisieren von Variablen on Wed, 23 Jul 2008 07:19:03 GMT]]></title><description><![CDATA[<p>ripmav schrieb:</p>
<blockquote>
<p>Hallo,<br />
ich würde gerne wissen, welche Methode die Beste ist, Variablen beim Erstellen zu &quot;leeren&quot;.<br />
Bisher habe ich folgendes gemacht:</p>
<pre><code class="language-cpp">struct STest {
	int a, b, c;
};

int main() {
	STest t;
	ZeroMemory(&amp;t, sizeof(t));

    return 0;
}

int main() {
	STest t = { 0, 0, 0 };

    return 0;
}
</code></pre>
<p>Welche der beiden Methoden ist schneller? (Im Beispiel ist es vielleicht egal, aber bei größeren Strukturen nicht)<br />
MfG,<br />
Max</p>
</blockquote>
<p>ich nehm immer</p>
<pre><code class="language-cpp">memset( &amp;t, 0, sizeof(t) )
</code></pre>
<p>und jetzt schlagt mich <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1552144</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1552144</guid><dc:creator><![CDATA[It0101]]></dc:creator><pubDate>Wed, 23 Jul 2008 07:19:03 GMT</pubDate></item><item><title><![CDATA[Reply to Initialisieren von Variablen on Wed, 23 Jul 2008 08:45:52 GMT]]></title><description><![CDATA[<p>It0101 schrieb:</p>
<blockquote>
<p>ich nehm immer</p>
<pre><code class="language-cpp">memset( &amp;t, 0, sizeof(t) )
</code></pre>
<p>und jetzt schlagt mich <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
</blockquote>
<p>Funktioniert nur garantiert, wenn es ein POD ist. Außerdem machst du so Annahmen über die binäre Darstellung (böse!) und arbeitest am Compiler vorbei bzw. für den Compiler intransparent. &quot;never ever try to be smarter than your compiler. furthermore never lie to your compiler.&quot;</p>
<p>Genug handfeste Gründe, eine der anderen Varianten zu bevorzugen.</p>
<p>Edit: Legasthenie <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1552203</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1552203</guid><dc:creator><![CDATA[7H3 N4C3R]]></dc:creator><pubDate>Wed, 23 Jul 2008 08:45:52 GMT</pubDate></item><item><title><![CDATA[Reply to Initialisieren von Variablen on Wed, 23 Jul 2008 10:03:29 GMT]]></title><description><![CDATA[<blockquote>
<p>Es ist natürlich wieder fallabhängig. Bei einer Klasse, welche Komplexe Zahlen repräsentiert, ist das &quot;explicit&quot;-Schlüsselwort bei einem Konstruktor a la 'Complex(double const&amp; real = 0.0, double const&amp; imaginary = 0.0)' wenig sinnvoll, da hier 'Complex c = 1.0' eine &quot;normale&quot; reelle Zahl bzw. c = 1 + 0i definieren kann.</p>
</blockquote>
<p>Ja da stimme ich dir zu, für ein &quot;complex&quot; Klasse ist explicit bei den Konstruktoren nicht angesagt.<br />
Allerdings für vielleicht 90% aller Konstruktoren die man schreibt ist es IMO sehr angesagt. Dummer Oversight bei der Entwicklung von C++, explicit musste nachträglich dazugefummelt werden, sonst wäre es standard (und es gäbe ein &quot;implicit&quot; oder ähnliches stattdessen).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1552261</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1552261</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Wed, 23 Jul 2008 10:03:29 GMT</pubDate></item><item><title><![CDATA[Reply to Initialisieren von Variablen on Wed, 23 Jul 2008 12:13:56 GMT]]></title><description><![CDATA[<p>Sehr interessant. Explicit kannte ich auch noch nicht <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /><br />
Danke für die Erklärung..</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1552352</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1552352</guid><dc:creator><![CDATA[ripmav]]></dc:creator><pubDate>Wed, 23 Jul 2008 12:13:56 GMT</pubDate></item></channel></rss>