<?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[Initialisierung (Zum Mitschreiben &#x2F; FAQ &#x2F; etc.)]]></title><description><![CDATA[<p>Initialisierung eines Objektes bedeutet, dass der Inhalt/Wert einer Entität (Objekt bzw. Referenz) in einen mehr oder minder wohldefinierten (Anfangs-)Zustand versetzt wird.<br />
Außerdem fällt für bestimmte Arten von Objekten und Initialisierungen der Zeitpunkt des Abschlusses der Initialisierung mit dem Beginn der Lebensdauer des Objektes zusammen.</p>
<p>Generell sind zwei verscheidene Initialisierungstypen unterscheidbar: solche, bei denen bestimmter Anfangswert (initialiser) explizit im Code vorgegeben wird, und solche, bei denen das nicht der Fall.<br />
Ich fange mit dem zweiten Fall (kein Initialisierer) an.<br />
Der Standard kennt hierbei drei Arten:<br />
<em>zero</em>-Initialisierung, <em>default</em>-Initialisierung und <em>value</em>-Initialisierung.</p>
<p>C++11 schrieb:</p>
<blockquote>
<p>8.5 Initializers [dcl.init]<br />
[...]<br />
5 To <strong>zero-initialize</strong> an object or reference of type T means:<br />
— if T is a scalar type (3.9), the object is set to the value 0 (zero), taken as an integral constant expression, converted to T;<br />
— if T is a (possibly cv-qualified) non-union class type, each non-static data member and each base-class subobject is zero-initialized and padding is initialized to zero bits;<br />
— if T is a (possibly cv-qualified) union type, the object’s first non-static named data member is zeroinitialized and padding is initialized to zero bits;<br />
— if T is an array type, each element is zero-initialized;<br />
— if T is a reference type, no initialization is performed.</p>
<p>6 To <strong>default-initialize</strong> an object of type T means:<br />
— if T is a (possibly cv-qualified) class type (Clause 9), the default constructor for T is called (and the initialization is ill-formed if T has no accessible default constructor);<br />
— if T is an array type, each element is default-initialized;<br />
— otherwise, no initialization is performed.<br />
If a program calls for the default initialization of an object of a const-qualified type T, T shall be a class type with a user-provided default constructor.</p>
<p>7 To <strong>value-initialize</strong> an object of type T means:<br />
— if T is a (possibly cv-qualified) class type (Clause 9) with a user-provided constructor (12.1), then the default constructor for T is called (and the initialization is ill-formed if T has no accessible default constructor);<br />
— if T is a (possibly cv-qualified) non-union class type without a user-provided constructor, then the object is zero-initialized and, if T’s implicitly-declared default constructor is non-trivial, that constructor is called.<br />
— if T is an array type, then each element is value-initialized;<br />
— otherwise, the object is zero-initialized.<br />
An object that is value-initialized is deemed to be constructed and thus subject to provisions of this International Standard applying to “constructed” objects, objects “for which the constructor has completed,” etc., even if no constructor is invoked for the object’s initialization.</p>
</blockquote>
<p>Grob Vereinfacht:<br />
Zero-Inialisierung: alle skalaren Elemente werden mit 0 initialisiert, paddingbits werden 0 bits<br />
Default-Initialisierung: Aufruf des (der im Fall von Arrays) Default-Konstruktors, sonst nichts<br />
Value-Initialisierung: zero-Initialisierung gefolgt von default-Initialisierung.</p>
<p>Die Regeln, wann welche Initialisierung verwendet wird, sind einfach:<br />
- Alle Objekte mit statischer Speicherdauer werden beim Programmstart zero-Initialisiert.<br />
- default-Initialisierung falls das Objekt ohne Initialisierer oder ein leeres Klammerpaar definiert wurde bzw. falls kein Member-Initialiser für das Subobjekt im Konstruktor angegeben wurde (und C++11: kein Initialiser in der Klassendefinition vorhanden ist)<br />
- value-Initialisierung, wenn leere Klammern verwendet wurden (wo zulässig).<br />
Ein implizit definierter Defaultkonstruktor einer Klasse foo hat immer die Form</p>
<pre><code class="language-cpp">foo() {};
</code></pre>
<p>d.h. Basisklassen und Member werden durch ihn nur default-initialisiert.</p>
<pre><code class="language-cpp">int a;         // default-Initialisierung: kein Effekt da skalar, Wert bleibt unbestimmt
struct foo { int a; };
new foo[10];   // default-Initialisierung: die a-Member jedes Elementes bleiben uninitialisiert, da der aufgerufene Default-Konstruktor nichts tut
new foo[10](); // value-Initialisierung: alle a sind 0
struct bar
{
   int a, b;
   bar() : a() {}  // a wird value-initialisiert, b wird default-initialisiert
};
</code></pre>
<p>Schließlich gibt es noch die Initialisierung mit einem bestimmten explizit angegeben Wert. Dazu schreibe ich später noch.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/297056/initialisierung-zum-mitschreiben-faq-etc</link><generator>RSS for Node</generator><lastBuildDate>Fri, 14 Aug 2026 16:16:18 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/297056.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 18 Dec 2011 12:58:36 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Initialisierung (Zum Mitschreiben &#x2F; FAQ &#x2F; etc.) on Sun, 18 Dec 2011 17:21:41 GMT]]></title><description><![CDATA[<p>Initialisierung eines Objektes bedeutet, dass der Inhalt/Wert einer Entität (Objekt bzw. Referenz) in einen mehr oder minder wohldefinierten (Anfangs-)Zustand versetzt wird.<br />
Außerdem fällt für bestimmte Arten von Objekten und Initialisierungen der Zeitpunkt des Abschlusses der Initialisierung mit dem Beginn der Lebensdauer des Objektes zusammen.</p>
<p>Generell sind zwei verscheidene Initialisierungstypen unterscheidbar: solche, bei denen bestimmter Anfangswert (initialiser) explizit im Code vorgegeben wird, und solche, bei denen das nicht der Fall.<br />
Ich fange mit dem zweiten Fall (kein Initialisierer) an.<br />
Der Standard kennt hierbei drei Arten:<br />
<em>zero</em>-Initialisierung, <em>default</em>-Initialisierung und <em>value</em>-Initialisierung.</p>
<p>C++11 schrieb:</p>
<blockquote>
<p>8.5 Initializers [dcl.init]<br />
[...]<br />
5 To <strong>zero-initialize</strong> an object or reference of type T means:<br />
— if T is a scalar type (3.9), the object is set to the value 0 (zero), taken as an integral constant expression, converted to T;<br />
— if T is a (possibly cv-qualified) non-union class type, each non-static data member and each base-class subobject is zero-initialized and padding is initialized to zero bits;<br />
— if T is a (possibly cv-qualified) union type, the object’s first non-static named data member is zeroinitialized and padding is initialized to zero bits;<br />
— if T is an array type, each element is zero-initialized;<br />
— if T is a reference type, no initialization is performed.</p>
<p>6 To <strong>default-initialize</strong> an object of type T means:<br />
— if T is a (possibly cv-qualified) class type (Clause 9), the default constructor for T is called (and the initialization is ill-formed if T has no accessible default constructor);<br />
— if T is an array type, each element is default-initialized;<br />
— otherwise, no initialization is performed.<br />
If a program calls for the default initialization of an object of a const-qualified type T, T shall be a class type with a user-provided default constructor.</p>
<p>7 To <strong>value-initialize</strong> an object of type T means:<br />
— if T is a (possibly cv-qualified) class type (Clause 9) with a user-provided constructor (12.1), then the default constructor for T is called (and the initialization is ill-formed if T has no accessible default constructor);<br />
— if T is a (possibly cv-qualified) non-union class type without a user-provided constructor, then the object is zero-initialized and, if T’s implicitly-declared default constructor is non-trivial, that constructor is called.<br />
— if T is an array type, then each element is value-initialized;<br />
— otherwise, the object is zero-initialized.<br />
An object that is value-initialized is deemed to be constructed and thus subject to provisions of this International Standard applying to “constructed” objects, objects “for which the constructor has completed,” etc., even if no constructor is invoked for the object’s initialization.</p>
</blockquote>
<p>Grob Vereinfacht:<br />
Zero-Inialisierung: alle skalaren Elemente werden mit 0 initialisiert, paddingbits werden 0 bits<br />
Default-Initialisierung: Aufruf des (der im Fall von Arrays) Default-Konstruktors, sonst nichts<br />
Value-Initialisierung: zero-Initialisierung gefolgt von default-Initialisierung.</p>
<p>Die Regeln, wann welche Initialisierung verwendet wird, sind einfach:<br />
- Alle Objekte mit statischer Speicherdauer werden beim Programmstart zero-Initialisiert.<br />
- default-Initialisierung falls das Objekt ohne Initialisierer oder ein leeres Klammerpaar definiert wurde bzw. falls kein Member-Initialiser für das Subobjekt im Konstruktor angegeben wurde (und C++11: kein Initialiser in der Klassendefinition vorhanden ist)<br />
- value-Initialisierung, wenn leere Klammern verwendet wurden (wo zulässig).<br />
Ein implizit definierter Defaultkonstruktor einer Klasse foo hat immer die Form</p>
<pre><code class="language-cpp">foo() {};
</code></pre>
<p>d.h. Basisklassen und Member werden durch ihn nur default-initialisiert.</p>
<pre><code class="language-cpp">int a;         // default-Initialisierung: kein Effekt da skalar, Wert bleibt unbestimmt
struct foo { int a; };
new foo[10];   // default-Initialisierung: die a-Member jedes Elementes bleiben uninitialisiert, da der aufgerufene Default-Konstruktor nichts tut
new foo[10](); // value-Initialisierung: alle a sind 0
struct bar
{
   int a, b;
   bar() : a() {}  // a wird value-initialisiert, b wird default-initialisiert
};
</code></pre>
<p>Schließlich gibt es noch die Initialisierung mit einem bestimmten explizit angegeben Wert. Dazu schreibe ich später noch.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2158317</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2158317</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Sun, 18 Dec 2011 17:21:41 GMT</pubDate></item><item><title><![CDATA[Reply to Initialisierung (Zum Mitschreiben &#x2F; FAQ &#x2F; etc.) on Sun, 18 Dec 2011 13:12:04 GMT]]></title><description><![CDATA[<p>camper kannst du mal den Link für den Standard posten den du zum zitieren nutzt?<br />
Ich hab hier nur den draft zum neuen Standard und würde gerne meine Sammlung erweitern?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2158322</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2158322</guid><dc:creator><![CDATA[Firefighter]]></dc:creator><pubDate>Sun, 18 Dec 2011 13:12:04 GMT</pubDate></item><item><title><![CDATA[Reply to Initialisierung (Zum Mitschreiben &#x2F; FAQ &#x2F; etc.) on Sun, 18 Dec 2011 13:20:54 GMT]]></title><description><![CDATA[<p>Der Standard wird gegen Geld von der ISO verkauft. Der letzte Draft ist schon gut genug, da hat sich nicht viel im Vergleich zum Endprodukt getan.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2158325</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2158325</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Sun, 18 Dec 2011 13:20:54 GMT</pubDate></item><item><title><![CDATA[Reply to Initialisierung (Zum Mitschreiben &#x2F; FAQ &#x2F; etc.) on Sun, 18 Dec 2011 13:26:33 GMT]]></title><description><![CDATA[<p>Hmm das ist doof, weil genau diese Abschnitte finde ich hier:<br />
<a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1836.pdf" rel="nofollow">http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1836.pdf</a></p>
<p>Oder ich bin zu unfähig das kopierte &quot;zero-initiliaze&quot; zu kopieren und zu finden <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="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2158329</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2158329</guid><dc:creator><![CDATA[Firefighter]]></dc:creator><pubDate>Sun, 18 Dec 2011 13:26:33 GMT</pubDate></item><item><title><![CDATA[Reply to Initialisierung (Zum Mitschreiben &#x2F; FAQ &#x2F; etc.) on Sun, 18 Dec 2011 13:29:19 GMT]]></title><description><![CDATA[<p>Schau einfach mal <a href="http://www.open-std.org/jtc1/sc22/wg21/" rel="nofollow">hier</a>.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2158334</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2158334</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Sun, 18 Dec 2011 13:29:19 GMT</pubDate></item><item><title><![CDATA[Reply to Initialisierung (Zum Mitschreiben &#x2F; FAQ &#x2F; etc.) on Sun, 18 Dec 2011 13:42:19 GMT]]></title><description><![CDATA[<p>Super danke.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2158344</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2158344</guid><dc:creator><![CDATA[Firefighter]]></dc:creator><pubDate>Sun, 18 Dec 2011 13:42:19 GMT</pubDate></item></channel></rss>