<?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, Verhalten definiert?]]></title><description><![CDATA[<p>Hi allerseits!</p>
<p>Weiß jemand ob das Verhalten von C++ für den folgenden Code definiert ist?:</p>
<pre><code class="language-cpp">class Foo
{
   int bar;

public:
   Foo(int bar) : bar(bar) {}
};
</code></pre>
<p>Ich bin mir bewußt, daß man leicht Klarheit schaffen kann, in dem man parameter und member unterschiedlich benennt:</p>
<pre><code class="language-cpp">class Foo
{
   int bar;

public:
   Foo(int _bar) : bar(_bar) {}
};
</code></pre>
<p>aber ich wüßte doch gerne ob das nur der leserlichkeit dient oder tatsächlich zwingend notwendig ist.</p>
<p>Danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/121349/initialisierung-verhalten-definiert</link><generator>RSS for Node</generator><lastBuildDate>Sat, 22 Aug 2026 16:42:30 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/121349.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 22 Sep 2005 13:05:04 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Initialisierung, Verhalten definiert? on Thu, 22 Sep 2005 13:05:04 GMT]]></title><description><![CDATA[<p>Hi allerseits!</p>
<p>Weiß jemand ob das Verhalten von C++ für den folgenden Code definiert ist?:</p>
<pre><code class="language-cpp">class Foo
{
   int bar;

public:
   Foo(int bar) : bar(bar) {}
};
</code></pre>
<p>Ich bin mir bewußt, daß man leicht Klarheit schaffen kann, in dem man parameter und member unterschiedlich benennt:</p>
<pre><code class="language-cpp">class Foo
{
   int bar;

public:
   Foo(int _bar) : bar(_bar) {}
};
</code></pre>
<p>aber ich wüßte doch gerne ob das nur der leserlichkeit dient oder tatsächlich zwingend notwendig ist.</p>
<p>Danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/877843</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/877843</guid><dc:creator><![CDATA[Jordy]]></dc:creator><pubDate>Thu, 22 Sep 2005 13:05:04 GMT</pubDate></item><item><title><![CDATA[Reply to Initialisierung, Verhalten definiert? on Thu, 22 Sep 2005 13:06:42 GMT]]></title><description><![CDATA[<p>Compiler nehmen, Konsolenprogramm schreiben und mit dem Debugger nachschauen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/877845</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/877845</guid><dc:creator><![CDATA[Pellaeon]]></dc:creator><pubDate>Thu, 22 Sep 2005 13:06:42 GMT</pubDate></item><item><title><![CDATA[Reply to Initialisierung, Verhalten definiert? on Thu, 22 Sep 2005 13:08:42 GMT]]></title><description><![CDATA[<p>Pellaeon schrieb:</p>
<blockquote>
<p>Compiler nehmen, Konsolenprogramm schreiben und mit dem Debugger nachschauen</p>
</blockquote>
<p>Sowas habe ich mir abgewöhnt, seit dem ich weiß, daß in solchen Details oft jeder Compiler was anderes macht. Selbst wenn ein Compiler das nicht nur compiliert, sondern sogar das richtige tut, heißt das noch lange nicht daß das auch andere machen. Darum die Frage, ob das offiziell definiert ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/877848</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/877848</guid><dc:creator><![CDATA[Jordy]]></dc:creator><pubDate>Thu, 22 Sep 2005 13:08:42 GMT</pubDate></item><item><title><![CDATA[Reply to Initialisierung, Verhalten definiert? on Thu, 22 Sep 2005 13:10:42 GMT]]></title><description><![CDATA[<p>ich habs net nachgelesen, aber alles was nach dem Doppelpunkt ist ist eine Initialierung der Membervariablen einer Klasse. Da man Parameter nicht initialisieren kann ist also eindeutig, was welches bar ist, würde ich zumindest denken.<br />
Ansonsten kannst nur warten bis die &quot;Standard-CPP-Gurus&quot; was posten <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/877850</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/877850</guid><dc:creator><![CDATA[Pellaeon]]></dc:creator><pubDate>Thu, 22 Sep 2005 13:10:42 GMT</pubDate></item><item><title><![CDATA[Reply to Initialisierung, Verhalten definiert? on Thu, 22 Sep 2005 13:12:31 GMT]]></title><description><![CDATA[<p>In der Initialisierungsliste ist das okay und richtig und definiert - wenn auch meiner Meinung nach nicht schön.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/877854</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/877854</guid><dc:creator><![CDATA[7H3 N4C3R]]></dc:creator><pubDate>Thu, 22 Sep 2005 13:12:31 GMT</pubDate></item><item><title><![CDATA[Reply to Initialisierung, Verhalten definiert? on Thu, 22 Sep 2005 13:20:14 GMT]]></title><description><![CDATA[<p>Pellaeon schrieb:</p>
<blockquote>
<p>ich habs net nachgelesen, aber alles was nach dem Doppelpunkt ist ist eine Initialierung der Membervariablen einer Klasse. Da man Parameter nicht initialisieren kann ist also eindeutig, was welches bar ist, würde ich zumindest denken.</p>
</blockquote>
<p>Ja, genau so habe ich mir das auch gedacht. Andererseits benötigt man für so einen Schluß schon ein wenig Intelligenz. Und die traue ich Compilern nicht unbedingt zu. Außerdem habe ich noch nie eine Initialisierung dieser Form gesehen, sondern immer nur Fälle, in denen der Name des Konstruktorparameters abgewandelt wurde (das aber in vielen lustigen Varianten).</p>
<p>Pellaeon schrieb:</p>
<blockquote>
<p>Ansonsten kannst nur warten bis die &quot;Standard-CPP-Gurus&quot; was posten <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>Jau <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/877858</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/877858</guid><dc:creator><![CDATA[Jordy]]></dc:creator><pubDate>Thu, 22 Sep 2005 13:20:14 GMT</pubDate></item><item><title><![CDATA[Reply to Initialisierung, Verhalten definiert? on Thu, 22 Sep 2005 13:27:17 GMT]]></title><description><![CDATA[<p>Pellaeon schrieb:</p>
<blockquote>
<p>ich habs net nachgelesen, aber alles was nach dem Doppelpunkt ist ist eine Initialierung der Membervariablen einer Klasse. Da man Parameter nicht initialisieren kann ist also eindeutig, was welches bar ist, würde ich zumindest denken.</p>
</blockquote>
<p>widerspricht aber dem gesetz, den oder möglichst nicht zu verwirren.</p>
<pre><code class="language-cpp">struct Bar{
   Bar(int*);
   Bar(Bar*);
};
struct Foo{
   Bar bar;
   Baz baz;
   Foo(int baz):baz(&amp;baz),bar(&amp;baz){
   }
};
</code></pre>
<p>was passiert wann und warum?<br />
ich wünsch mir einen dummen und verläßlichen compiler. der schlaue verwickelt sich nur schrecklich in widersprüche.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/877871</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/877871</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Thu, 22 Sep 2005 13:27:17 GMT</pubDate></item><item><title><![CDATA[Reply to Initialisierung, Verhalten definiert? on Thu, 22 Sep 2005 13:32:54 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>Pellaeon schrieb:</p>
<blockquote>
<p>ich habs net nachgelesen, aber alles was nach dem Doppelpunkt ist ist eine Initialierung der Membervariablen einer Klasse. Da man Parameter nicht initialisieren kann ist also eindeutig, was welches bar ist, würde ich zumindest denken.</p>
</blockquote>
<p>widerspricht aber dem gesetz, den oder möglichst nicht zu verwirren.</p>
<pre><code class="language-cpp">struct Bar{
   Bar(int*);
   Bar(Bar*);
};
struct Foo{
   Bar bar;
   Baz baz;
   Foo(int baz):baz(&amp;baz),bar(&amp;baz){
   }
};
</code></pre>
<p>was passiert wann und warum?<br />
ich wünsch mir einen dummen und verläßlichen compiler. der schlaue verwickelt sich nur schrecklich in widersprüche.</p>
</blockquote>
<p>Ähm. Damit hast du aber eigentlich keine Antwort gegeben, oder?</p>
<p>Trotzdem deinem gesteigerten Beispiel wäre durchaus denkbar, daß der Compiler den Unterschied zwischen Parameter und Member begreift.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/877880</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/877880</guid><dc:creator><![CDATA[Jordy]]></dc:creator><pubDate>Thu, 22 Sep 2005 13:32:54 GMT</pubDate></item><item><title><![CDATA[Reply to Initialisierung, Verhalten definiert? on Thu, 22 Sep 2005 13:34:35 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<pre><code class="language-cpp">struct Bar{
   Bar(int*);
   Bar(Bar*);
};
struct Foo{
   Bar bar;
   Baz baz;
   Foo(int baz):baz(&amp;baz),bar(&amp;baz){
   }
};
</code></pre>
<p>was passiert wann und warum?</p>
</blockquote>
<p>Zuerst wird bar initialisiert mit der Adresse von einem temporär übergebenen int namens baz aus der Parameterliste. <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="😮"
    /> Dann stellen wir fest, dass es garkein Baz gibt gibt und hören auf. Wäre Baz ein Bar dann initialisieren wir baz mit der Adresse des temporären ints namens baz aus der Parameterliste.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/877881</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/877881</guid><dc:creator><![CDATA[7H3 N4C3R]]></dc:creator><pubDate>Thu, 22 Sep 2005 13:34:35 GMT</pubDate></item><item><title><![CDATA[Reply to Initialisierung, Verhalten definiert? on Thu, 22 Sep 2005 20:23:06 GMT]]></title><description><![CDATA[<p>ich schreibe objekt-variablen immer groß und lokale variablen immer klein. da bleibt mir sowas erspart <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/878137</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/878137</guid><dc:creator><![CDATA[Konfusius]]></dc:creator><pubDate>Thu, 22 Sep 2005 20:23:06 GMT</pubDate></item><item><title><![CDATA[Reply to Initialisierung, Verhalten definiert? on Thu, 22 Sep 2005 20:26:02 GMT]]></title><description><![CDATA[<p>Konfusius schrieb:</p>
<blockquote>
<p>ich schreibe objekt-variablen immer groß und lokale variablen immer klein. da bleibt mir sowas erspart <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>Hmm, imho gar nix gut.</p>
<p>MfG SideWinder</p>
]]></description><link>https://www.c-plusplus.net/forum/post/878142</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/878142</guid><dc:creator><![CDATA[SideWinder]]></dc:creator><pubDate>Thu, 22 Sep 2005 20:26:02 GMT</pubDate></item><item><title><![CDATA[Reply to Initialisierung, Verhalten definiert? on Fri, 23 Sep 2005 08:43:41 GMT]]></title><description><![CDATA[<p>Konfusius schrieb:</p>
<blockquote>
<p>ich schreibe objekt-variablen immer groß und lokale variablen immer klein. da bleibt mir sowas erspart <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>Klar, wie gesagt, es gibt genug Möglichkeiten das über Namensgebung zu umgehen.</p>
<p>Aber was C++ in so einem Fall machen sollte, wissen wir aber immernocn nicht. Die Experten sind sich offenbar nicht einig.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/878364</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/878364</guid><dc:creator><![CDATA[Jordy]]></dc:creator><pubDate>Fri, 23 Sep 2005 08:43:41 GMT</pubDate></item><item><title><![CDATA[Reply to Initialisierung, Verhalten definiert? on Fri, 23 Sep 2005 09:10:04 GMT]]></title><description><![CDATA[<p><a href="http://www.kuzbass.ru:8086/docs/isocpp/special.html" rel="nofollow">http://www.kuzbass.ru:8086/docs/isocpp/special.html</a></p>
<p>C++ Standard 12.6.2 clause 7</p>
<blockquote>
<p>Names in the expression-list of a mem-initializer are evaluated in the scope of the constructor for which the mem-initializer is specified. [Example:</p>
<p>class X {<br />
int a;<br />
int b;<br />
<strong>int i</strong>;<br />
int j;<br />
public:<br />
const int&amp; r;<br />
X(<strong>int i</strong>): r(a), b(i), <strong>i(i)</strong>, j(this-&gt;i) {}<br />
};</p>
<p>initializes X::r to refer to X::a, initializes X::b with the value of the constructor parameter i, <strong>initializes X::i with the value of the constructor parameter i</strong>, and initializes X::j with the value of ]X::i; this takes place each time an object of class X is created. ] [Note: because the mem-initializer are evaluated in the scope of the constructor, the this pointer can be used in the expression-list of a mem-initializer to refer to the object being initialized. ]</p>
</blockquote>
<p>Also:</p>
<pre><code class="language-cpp">class Foo
{
   int bar;

public:
   Foo(int bar) : bar(bar) {}
};
</code></pre>
<p>ist definiert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/878384</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/878384</guid><dc:creator><![CDATA[7H3 N4C3R]]></dc:creator><pubDate>Fri, 23 Sep 2005 09:10:04 GMT</pubDate></item></channel></rss>