<?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[Die Regel der großen 3 und C++11]]></title><description><![CDATA[<p>Hat die Regel der großen 3 in C++11 eigentlich noch so Gültigkeit? Schließlich könnte man ja einen Typ auch moveable machen. Wie wärs mit &quot;Regel der großen 5&quot;?</p>
<p>(Wird eigentlich implizit ein Move-Konstruktor und op= vom Compiler generiert, wenn benötigt?)</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/289310/die-regel-der-großen-3-und-c-11</link><generator>RSS for Node</generator><lastBuildDate>Wed, 19 Aug 2026 05:44:00 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/289310.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 02 Jul 2011 12:46:18 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Die Regel der großen 3 und C++11 on Sat, 02 Jul 2011 12:46:18 GMT]]></title><description><![CDATA[<p>Hat die Regel der großen 3 in C++11 eigentlich noch so Gültigkeit? Schließlich könnte man ja einen Typ auch moveable machen. Wie wärs mit &quot;Regel der großen 5&quot;?</p>
<p>(Wird eigentlich implizit ein Move-Konstruktor und op= vom Compiler generiert, wenn benötigt?)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2087666</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2087666</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Sat, 02 Jul 2011 12:46:18 GMT</pubDate></item><item><title><![CDATA[Reply to Die Regel der großen 3 und C++11 on Sat, 02 Jul 2011 12:57:49 GMT]]></title><description><![CDATA[<p>314159265358979 schrieb:</p>
<blockquote>
<p>(Wird eigentlich implizit ein Move-Konstruktor und op= vom Compiler generiert, wenn benötigt?)</p>
</blockquote>
<p>Ja. Was die Regel der großen 3 angeht bietet C++0x eine Möglichkeit dem Compiler explizit zu sagen welche Memberfunktionen er generieren soll.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2087669</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2087669</guid><dc:creator><![CDATA[dot]]></dc:creator><pubDate>Sat, 02 Jul 2011 12:57:49 GMT</pubDate></item><item><title><![CDATA[Reply to Die Regel der großen 3 und C++11 on Sat, 02 Jul 2011 13:01:25 GMT]]></title><description><![CDATA[<p>dot schrieb:</p>
<blockquote>
<p>314159265358979 schrieb:</p>
<blockquote>
<p>(Wird eigentlich implizit ein Move-Konstruktor und op= vom Compiler generiert, wenn benötigt?)</p>
</blockquote>
<p>Ja. Was die Regel der großen 3 angeht bietet C++0x eine Möglichkeit dem Compiler explizit zu sagen welche Memberfunktionen er generieren soll.</p>
</blockquote>
<p>Du spricht von &quot;deleted definitions&quot; oder? <a href="http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2011/n3242.pdf" rel="nofollow">N3242</a> -&gt; 8.4.3</p>
<p>Bezüglich des move-constructors und move-assignment-op. -&gt; 12.8(.10)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2087672</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2087672</guid><dc:creator><![CDATA[inter2k3]]></dc:creator><pubDate>Sat, 02 Jul 2011 13:01:25 GMT</pubDate></item><item><title><![CDATA[Reply to Die Regel der großen 3 und C++11 on Sat, 02 Jul 2011 13:04:52 GMT]]></title><description><![CDATA[<p>inter2k3 schrieb:</p>
<blockquote>
<p>Du spricht von &quot;deleted definitions&quot; oder? <a href="http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2011/n3242.pdf" rel="nofollow">N3242</a> -&gt; 8.4.3</p>
</blockquote>
<p>Ja ich mein defaulted functions und deleted definitions...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2087674</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2087674</guid><dc:creator><![CDATA[dot]]></dc:creator><pubDate>Sat, 02 Jul 2011 13:04:52 GMT</pubDate></item><item><title><![CDATA[Reply to Die Regel der großen 3 und C++11 on Sat, 02 Jul 2011 13:47:55 GMT]]></title><description><![CDATA[<p>Was genau aendert sich an der Regel denn?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2087690</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2087690</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Sat, 02 Jul 2011 13:47:55 GMT</pubDate></item><item><title><![CDATA[Reply to Die Regel der großen 3 und C++11 on Sat, 02 Jul 2011 16:06:59 GMT]]></title><description><![CDATA[<p>Was bringen die &quot;deleted definitions&quot; im Gegensatz zur aktuellen Methode ( <code>private</code> machen) eigentlich?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2087775</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2087775</guid><dc:creator><![CDATA[EOutOfResources]]></dc:creator><pubDate>Sat, 02 Jul 2011 16:06:59 GMT</pubDate></item><item><title><![CDATA[Reply to Die Regel der großen 3 und C++11 on Sat, 02 Jul 2011 16:17:55 GMT]]></title><description><![CDATA[<p>Sie drücken explizit aus was du willst. Außerdem gibts auch einen semantischen Unterschied: Wenn der Copy-Ctor nur private ist kannst du ihn in der Klasse immer noch verwenden...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2087783</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2087783</guid><dc:creator><![CDATA[dot]]></dc:creator><pubDate>Sat, 02 Jul 2011 16:17:55 GMT</pubDate></item><item><title><![CDATA[Reply to Die Regel der großen 3 und C++11 on Sat, 02 Jul 2011 16:19:39 GMT]]></title><description><![CDATA[<p>dot schrieb:</p>
<blockquote>
<p>Sie drücken explizit aus was du willst.</p>
</blockquote>
<p>Das war mein erster Gedanke.</p>
<p>dot schrieb:</p>
<blockquote>
<p>Außerdem gibts auch einen semantischen Unterschied</p>
</blockquote>
<p>Den kannte ich nicht. Danke <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2087787</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2087787</guid><dc:creator><![CDATA[EOutOfResources]]></dc:creator><pubDate>Sat, 02 Jul 2011 16:19:39 GMT</pubDate></item><item><title><![CDATA[Reply to Die Regel der großen 3 und C++11 on Sun, 03 Jul 2011 06:38:26 GMT]]></title><description><![CDATA[<p>dot schrieb:</p>
<blockquote>
<p>Sie drücken explizit aus was du willst. Außerdem gibts auch einen semantischen Unterschied: Wenn der Copy-Ctor nur private ist kannst du ihn in der Klasse immer noch verwenden...</p>
</blockquote>
<p>Es sei denn er hat keinen Koerper.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2087981</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2087981</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Sun, 03 Jul 2011 06:38:26 GMT</pubDate></item><item><title><![CDATA[Reply to Die Regel der großen 3 und C++11 on Sun, 03 Jul 2011 08:50:13 GMT]]></title><description><![CDATA[<p>Shade Of Mine schrieb:</p>
<blockquote>
<p>Es sei denn er hat keinen Koerper.</p>
</blockquote>
<p>Was du aber erst beim Linken feststellen kannst. Und wenn du eine statische Bibliothek erstellst, merkst du das gar nie. Ein Compilerfehler ist da schon besser.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2088009</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2088009</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sun, 03 Jul 2011 08:50:13 GMT</pubDate></item><item><title><![CDATA[Reply to Die Regel der großen 3 und C++11 on Mon, 04 Jul 2011 12:48:02 GMT]]></title><description><![CDATA[<p>314159265358979 schrieb:</p>
<blockquote>
<p>Hat die Regel der großen 3 in C++11 eigentlich noch so Gültigkeit?</p>
</blockquote>
<p>Da hat sich nichts verschlechtert. Im Gegenteil. Die Regeln sind meiner Meinung nach sogar einfacher und Newbie-freundlicher geworden, wenn man eine Ausnahmeregelung ignoriert. Die Compiler-Generierung spezieller Elementfunktion ist restriktiver geworden. Die Ausnahmeneregelung gibt es nur für die C++98-Kompatibilität, ist als &quot;deprecated&quot; eingestuft und fliegt wahrscheinlich das nächste oder übernächste Mal raus.</p>
<p>Das Prinzip: Kopier- und Move-Operationen (sowohl Konstruktor als auch Zuweisung) und Destruktor sind besondere Funktionen. Stellt der Benutzer auch nur eine davon selbst bereit, ist es sehr wahrscheinlich, dass die Compiler-generierten anderen Funktionen das &quot;falsche&quot; tun würden. C++11 verhindert in diesem Fall jegliche Generierung anderer Kopier/Move-Operationen. Man kann also nicht mehr viel falsch.</p>
<p>Die Ausnahme: Da diese einfache Regel von oben nicht rückwärtskompatibel zu C++98 ist, gibt es eine Ausnahme. Stellt der Benutzer mindestens eine Funktion aus der Menge {copy-ctor, copy-assign, dtor} und keine sonstige Move-Operationen bereit, werden wenn nötig &amp; möglich trotzdem die übrigen Kopier-Operationen generiert. Da diese Ausnahmeregelung den Status &quot;deprecated&quot; hat, kann man von einem guten Compiler erwarten, dass er im C++11-Modus in so einem Fall eine Warnung ausgeben wird.</p>
<p>Die 3er-Regel ist also wegen der Ausnahmeregelung noch interessant. Die Verletzung der 3er-Regel wird von einem guten Compiler höchstwahrscheinlich mit einer Warnung quittiert. Falls der Code trotz Warnung korrekt ist, kann man dem Compiler durch &quot;=default;&quot;-Deklarationen explizit sagen, dass eine Compiler-generierte Version gewünscht und okay ist.</p>
<p>Wenn gewisse Voraussetzungen bzgl der Datenelemente nicht erfüllt werden, wird es auch keine generierten Kopier/Move-Operationen geben. Die Details habe ich jetzt nicht mehr im Kopf. Aber man kann zumindest davon ausgehen, dass ein struct a la</p>
<pre><code class="language-cpp">struct foo {
  vector&lt;int&gt; x;
  list&lt;string&gt; y;
  double z;
};
</code></pre>
<p>sowohl Compiler-generierte Kopier- als auch Move-Operatinen anbieten wird, da alle Typen aller Datenelemente Kopier- und Move-Operationen anbieten. Skalare Typen (wie zB double) werden hier so behandelt, als hätten sie auch Move-Operationen, welche nur äquivalent zu den Kopieroperationen sind. Jedenfalls sind in diesem Fall die Zeilen</p>
<pre><code class="language-cpp">foo(foo const&amp;) = default;
  foo(foo     &amp;&amp;) = default;
  foo&amp; operator=(foo const&amp;) = default;
  foo&amp; operator=(foo     &amp;&amp;) = default;
</code></pre>
<p>überflüssig.</p>
<p>kk</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2088625</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2088625</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Mon, 04 Jul 2011 12:48:02 GMT</pubDate></item><item><title><![CDATA[Reply to Die Regel der großen 3 und C++11 on Mon, 04 Jul 2011 13:25:33 GMT]]></title><description><![CDATA[<p>Vielen Dank für den Beitrag <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2088662</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2088662</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Mon, 04 Jul 2011 13:25:33 GMT</pubDate></item><item><title><![CDATA[Reply to Die Regel der großen 3 und C++11 on Mon, 04 Jul 2011 13:59:49 GMT]]></title><description><![CDATA[<p>Eine Anmerkung dazu noch: MSVC 2010 unterstützt zwar Rvalue Referenzen und Move-Konstruktoren/-Assignment, die neuen Regeln für automatisch Generierte Konstruktoren/Assignment-Operatoren allerdings <strong>noch nicht</strong>.<br />
(IIRC definiert MSVC 2010 niemals selbst irgendwelche Move-Ctor/Move-Assignment-Operatoren, die Regeln für die grossen 3 sind umgesetzt wie im 03er Standard vorgeschrieben)</p>
<p>Wer also damit rumexperimentieren möchte, sollte dazu die neueste GCC Version verwenden.<br />
Und wer portierbaren Code schreiben will, muss leider die entsprechenden Funktionen selbst definieren (zumindest per #ifdef für MSVC 2010).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2088690</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2088690</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Mon, 04 Jul 2011 13:59:49 GMT</pubDate></item></channel></rss>