<?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[constructor confusion]]></title><description><![CDATA[<p>Entweder:<br />
- ist es für mich zu spät zum Denken<br />
- habe ich eine grundlegende Sache bei Konstruktoren mit Defaultargumenten verschlafen<br />
- oder ich habe einen bug gefunden? (G++ 4.8.2)</p>
<p><strong>In folgendem Code ist die Ausgabe lediglich &quot;Hello World!&quot;.</strong><br />
Was ich erwartet hätte wäre:</p>
<p>&quot;_1Hello World!&quot;</p>
<pre><code>#include &lt;iostream&gt;

class A
{
public:
    A(bool _1 = true, bool _2 = false);
    A() = delete;
};

A::A(bool _1, bool _2)
{
    if (_1)
        std::cout &lt;&lt; &quot;_1&quot;;
    if (_2)
        std::cout &lt;&lt; &quot;_2&quot;;
}

int main()
{
    //A a; // ambiguous, does work without deleted_ctor as expected
    A a(); // compiles
    // A* b = new A();   // ambiguous, does work without deleted_ctor as expected
    // A* b = new A;     // ambiguous, does work without deleted_ctor as expected
    std::cout &lt;&lt; &quot;Hello world!&quot; &lt;&lt; std::endl;
    return 0;
}
</code></pre>
<p>Ich dachte, dass vielleicht doch ein default ctor erstellt wird,<br />
sodass ich ihn deleten lasse, aber das scheint nicht der Fall zu sein.</p>
<p><a href="http://ideone.com" rel="nofollow">ideone.com</a> gibt mir das gleiche Ergebnis.</p>
<p>Dieses Verhalten hat mir ganz schön Schwierigkeiten bereitet, bis ich angefangen habe am ctor zu zweifeln.</p>
<p>Klärt mich auf... bitte</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/323919/constructor-confusion</link><generator>RSS for Node</generator><lastBuildDate>Wed, 15 Jul 2026 05:20:18 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/323919.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 23 Feb 2014 02:55:19 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to constructor confusion on Sun, 23 Feb 2014 03:02:56 GMT]]></title><description><![CDATA[<p>Entweder:<br />
- ist es für mich zu spät zum Denken<br />
- habe ich eine grundlegende Sache bei Konstruktoren mit Defaultargumenten verschlafen<br />
- oder ich habe einen bug gefunden? (G++ 4.8.2)</p>
<p><strong>In folgendem Code ist die Ausgabe lediglich &quot;Hello World!&quot;.</strong><br />
Was ich erwartet hätte wäre:</p>
<p>&quot;_1Hello World!&quot;</p>
<pre><code>#include &lt;iostream&gt;

class A
{
public:
    A(bool _1 = true, bool _2 = false);
    A() = delete;
};

A::A(bool _1, bool _2)
{
    if (_1)
        std::cout &lt;&lt; &quot;_1&quot;;
    if (_2)
        std::cout &lt;&lt; &quot;_2&quot;;
}

int main()
{
    //A a; // ambiguous, does work without deleted_ctor as expected
    A a(); // compiles
    // A* b = new A();   // ambiguous, does work without deleted_ctor as expected
    // A* b = new A;     // ambiguous, does work without deleted_ctor as expected
    std::cout &lt;&lt; &quot;Hello world!&quot; &lt;&lt; std::endl;
    return 0;
}
</code></pre>
<p>Ich dachte, dass vielleicht doch ein default ctor erstellt wird,<br />
sodass ich ihn deleten lasse, aber das scheint nicht der Fall zu sein.</p>
<p><a href="http://ideone.com" rel="nofollow">ideone.com</a> gibt mir das gleiche Ergebnis.</p>
<p>Dieses Verhalten hat mir ganz schön Schwierigkeiten bereitet, bis ich angefangen habe am ctor zu zweifeln.</p>
<p>Klärt mich auf... bitte</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2384686</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2384686</guid><dc:creator><![CDATA[5cript]]></dc:creator><pubDate>Sun, 23 Feb 2014 03:02:56 GMT</pubDate></item><item><title><![CDATA[Reply to constructor confusion on Sun, 23 Feb 2014 05:09:24 GMT]]></title><description><![CDATA[<p>Tim06TR schrieb:</p>
<blockquote>
<p>Entweder:<br />
- ist es für mich zu spät zum Denken</p>
</blockquote>
<p>Jo. Suchst an der flaschen Stelle rum.</p>
<p>Tim06TR schrieb:</p>
<blockquote>
<pre><code>A a(); // compiles
</code></pre>
</blockquote>
<p>Da deklarierst Du die Funktion a, die keine Paremeter nimmt und ein A zurückgibt. Du definierst keine lokale Variable namens a vom Typ A.</p>
<p>Spaßig, durch</p>
<pre><code>A(bool _1 = true, bool _2 = false);
</code></pre>
<p>ist der automatisch generierte Defaultkonstruktor weg, wie es sein soll.</p>
<pre><code>A()=default;
</code></pre>
<p>tut ihn dennoch hin, was die Sache ambiq macht, soweit auch logisch.</p>
<pre><code>A()=delete;
</code></pre>
<p>tut ihn auch hin und macht ambiq, das hätte ich nicht erwartet.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2384687</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2384687</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Sun, 23 Feb 2014 05:09:24 GMT</pubDate></item><item><title><![CDATA[Reply to constructor confusion on Sun, 23 Feb 2014 05:16:59 GMT]]></title><description><![CDATA[<pre><code>int main()
{
    int A();
    A();
    return 0;
}

int A()
{
    std::cout &lt;&lt; &quot;test&quot;;
    return 0;
}
</code></pre>
<p>oh ich wusste gar nicht, dass das legal ist.<br />
Auch gut <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>
<p>Hat das bei nicht-lambdas irgend ein nutzen?</p>
<p>EDIT: ich finde das ist eine ziemliches Fettnäpfchen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2384688</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2384688</guid><dc:creator><![CDATA[5cript]]></dc:creator><pubDate>Sun, 23 Feb 2014 05:16:59 GMT</pubDate></item><item><title><![CDATA[Reply to constructor confusion on Sun, 23 Feb 2014 05:19:56 GMT]]></title><description><![CDATA[<p>Tim06TR schrieb:</p>
<blockquote>
<p>Hat das bei nicht-lambdas irgend ein nutzen?</p>
</blockquote>
<p>Wüßte nicht. ALso das lokale Deklarieren geht schon immer, dachte ich. Sicher lange vor C++11.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2384689</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2384689</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Sun, 23 Feb 2014 05:19:56 GMT</pubDate></item><item><title><![CDATA[Reply to constructor confusion on Sun, 23 Feb 2014 07:50:57 GMT]]></title><description><![CDATA[<blockquote>
<p>oh ich wusste gar nicht, dass das legal ist.</p>
</blockquote>
<p>Natürlich nicht. Es ist (zumindest meiner Meinung nach) völlig nutzlos, solange man Funktionen auch nicht in Funktionen definieren darf.</p>
<blockquote>
<p>Sicher lange vor C++11.</p>
</blockquote>
<p>Klar, schon in 98.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2384691</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2384691</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Sun, 23 Feb 2014 07:50:57 GMT</pubDate></item><item><title><![CDATA[Reply to constructor confusion on Sun, 23 Feb 2014 09:13:21 GMT]]></title><description><![CDATA[<p>Tim06TR schrieb:</p>
<blockquote>
<p>EDIT: ich finde das ist eine ziemliches Fettnäpfchen.</p>
</blockquote>
<p>Als Gegenmittel wurde in C++11 die &quot;Uniform initialization syntax and semantics&quot; (siehe <a href="http://www.stroustrup.com/C++11FAQ.html#uniform-init" rel="nofollow">http://www.stroustrup.com/C++11FAQ.html#uniform-init</a>) engefuhrt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2384699</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2384699</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Sun, 23 Feb 2014 09:13:21 GMT</pubDate></item><item><title><![CDATA[Reply to constructor confusion on Sun, 23 Feb 2014 09:15:39 GMT]]></title><description><![CDATA[<p>manni66 schrieb:</p>
<blockquote>
<p>Als Gegenmittel wurde in C++11 [ein weiteres Fettnäpfchen] engefuhrt.</p>
</blockquote>
<p>ftfy <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/2384700</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2384700</guid><dc:creator><![CDATA[ftfy]]></dc:creator><pubDate>Sun, 23 Feb 2014 09:15:39 GMT</pubDate></item><item><title><![CDATA[Reply to constructor confusion on Sun, 23 Feb 2014 09:16:55 GMT]]></title><description><![CDATA[<p>Arcoth schrieb:</p>
<blockquote>
<blockquote>
<p>Sicher lange vor C++11.</p>
</blockquote>
<p>Klar, schon in 98.</p>
</blockquote>
<p>Schon in C.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2384703</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2384703</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Sun, 23 Feb 2014 09:16:55 GMT</pubDate></item><item><title><![CDATA[Reply to constructor confusion on Sun, 23 Feb 2014 16:52:42 GMT]]></title><description><![CDATA[<p>gcc mag deine Namensgebung '_1' nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2384797</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2384797</guid><dc:creator><![CDATA[Jockelx]]></dc:creator><pubDate>Sun, 23 Feb 2014 16:52:42 GMT</pubDate></item><item><title><![CDATA[Reply to constructor confusion on Sun, 23 Feb 2014 19:30:23 GMT]]></title><description><![CDATA[<p>Jockelx schrieb:</p>
<blockquote>
<p>gcc mag deine Namensgebung '_1' nicht.</p>
</blockquote>
<p>gcc hat mit _1 überhaupt kein Problem.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2384823</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2384823</guid><dc:creator><![CDATA[_Joggel]]></dc:creator><pubDate>Sun, 23 Feb 2014 19:30:23 GMT</pubDate></item><item><title><![CDATA[Reply to constructor confusion on Sun, 23 Feb 2014 20:12:17 GMT]]></title><description><![CDATA[<p>Jockelx schrieb:</p>
<blockquote>
<p>gcc mag deine Namensgebung '_1' nicht.</p>
</blockquote>
<p>Sollte er nicht, denn der Name ist nicht im globalen Namensraum und der Unterstrich wird nicht von einem Großbuchstaben gefolgt.</p>
<p>Das einzige &quot;Problemchen&quot; könnte sein, dass ein anderer Bezeichner durch den Funktionsparameter verdeckt wird: <code>(std::placeholders)::_1</code> . Ist aber unwichtig, weil der hier sowieso nicht benutzt wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2384832</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2384832</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Sun, 23 Feb 2014 20:12:17 GMT</pubDate></item><item><title><![CDATA[Reply to constructor confusion on Sun, 23 Feb 2014 22:49:45 GMT]]></title><description><![CDATA[<p>Arcoth schrieb:</p>
<blockquote>
<p>Jockelx schrieb:</p>
<blockquote>
<p>gcc mag deine Namensgebung '_1' nicht.</p>
</blockquote>
<p>Sollte er nicht</p>
</blockquote>
<p>Stimmt.<br />
Der Code von Tim ist aber richtig (zumindest ohne das delete) und ich hab verstanden, bei ihm würde es nicht kompilieren.<br />
Deshalb hab ich geraten, dass das _1 stört.<br />
Funktioniert aber auch mit _1, auch auf ideone.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2384862</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2384862</guid><dc:creator><![CDATA[Jockelx]]></dc:creator><pubDate>Sun, 23 Feb 2014 22:49:45 GMT</pubDate></item></channel></rss>