<?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[explicit]]></title><description><![CDATA[<p>Hallo Leute!<br />
Ich habe eine Bitte, ich verstehe das Konzept nicht welches hinter explicit steht. Ich habe gegooglt und selbst etwas experimentiert, was dieses keyword für einen nutzen hat... . Ich würde mich freuen wenn mir hier jemand genauer erläutern könnte was es damit auf sich hat und wo man es verwenden sollte.</p>
<p>MfG yihaaa</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/304907/explicit</link><generator>RSS for Node</generator><lastBuildDate>Fri, 26 Jun 2026 21:03:28 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/304907.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 16 Jun 2012 18:17:54 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to explicit on Sat, 16 Jun 2012 18:17:54 GMT]]></title><description><![CDATA[<p>Hallo Leute!<br />
Ich habe eine Bitte, ich verstehe das Konzept nicht welches hinter explicit steht. Ich habe gegooglt und selbst etwas experimentiert, was dieses keyword für einen nutzen hat... . Ich würde mich freuen wenn mir hier jemand genauer erläutern könnte was es damit auf sich hat und wo man es verwenden sollte.</p>
<p>MfG yihaaa</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2223975</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2223975</guid><dc:creator><![CDATA[yihaaa]]></dc:creator><pubDate>Sat, 16 Jun 2012 18:17:54 GMT</pubDate></item><item><title><![CDATA[Reply to explicit on Sat, 16 Jun 2012 18:25:39 GMT]]></title><description><![CDATA[<p>explicit verhindert die implizite Typumwandlung von dem Typ des Arguments, das ein Konstruktor als einzigen Parameter nimmt.<br />
Beispiel:</p>
<pre><code class="language-cpp">struct A
{
  A(int)
  {}
};
struct B
{
  explicit B(int)
  {}
};

A a = 5; // geht
B b = 5; // geht nicht
B c(5); // geht

void foo(A a);
void bar(B b);

int main()
{
  foo(7); // geht
  bar(7); // geht nicht 
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2223978</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2223978</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Sat, 16 Jun 2012 18:25:39 GMT</pubDate></item><item><title><![CDATA[Reply to explicit on Sat, 16 Jun 2012 18:30:30 GMT]]></title><description><![CDATA[<p>könnte auch interessant sein:<br />
<a href="http://www.c-plusplus.net/forum/304837" rel="nofollow">http://www.c-plusplus.net/forum/304837</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2223983</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2223983</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Sat, 16 Jun 2012 18:30:30 GMT</pubDate></item><item><title><![CDATA[Reply to explicit on Sat, 16 Jun 2012 18:42:59 GMT]]></title><description><![CDATA[<p>Danke erst mal! Wie ich deim Beispiel entnehmen konnte sorgt explicite dafür, dass eine Klasse, etc... immer nur direkt initialisiert werden darf? Also mit den ( ) und nicht über Kopierkonstruktor oder Zuweisungsoperator?</p>
<p>MfG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2223984</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2223984</guid><dc:creator><![CDATA[yihaaa]]></dc:creator><pubDate>Sat, 16 Jun 2012 18:42:59 GMT</pubDate></item><item><title><![CDATA[Reply to explicit on Sat, 16 Jun 2012 19:11:09 GMT]]></title><description><![CDATA[<p>Na ja, mehr oder weniger. Korrekter wäre, wie erwähnt, dass es keine implizite Konvertierung von dem Argumenttyp zum &quot;eigentlichen&quot; Typ gibt. <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/2223990</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2223990</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Sat, 16 Jun 2012 19:11:09 GMT</pubDate></item><item><title><![CDATA[Reply to explicit on Sat, 16 Jun 2012 19:43:27 GMT]]></title><description><![CDATA[<p>Ich wiederhol mich: Was soll das bringen? Also jetzt mal rein praktisch. Oder gibt's keinen praktischen Grund und man will nur komisch aussehende Zuweisungen verhindern?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2223996</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2223996</guid><dc:creator><![CDATA[Incocnito]]></dc:creator><pubDate>Sat, 16 Jun 2012 19:43:27 GMT</pubDate></item><item><title><![CDATA[Reply to explicit on Sat, 16 Jun 2012 19:59:02 GMT]]></title><description><![CDATA[<p>Incocnito schrieb:</p>
<blockquote>
<p>Oder gibt's keinen praktischen Grund und man will nur komisch aussehende Zuweisungen verhindern?</p>
</blockquote>
<p>Komisch aussehende Zuweisungen zu verhindern ist ein ziemlich praktischer Grund. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2223998</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2223998</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Sat, 16 Jun 2012 19:59:02 GMT</pubDate></item><item><title><![CDATA[Reply to explicit on Sat, 16 Jun 2012 20:04:28 GMT]]></title><description><![CDATA[<p>Nee, für mich ist das nur Ästhetik und Ästhetik ist für mich Stil. Ich find's nur merkwürdig, dass man für soetwas, was man kinderleicht nachbauen kann, extra ein Schlüsselwort einführt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2223999</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2223999</guid><dc:creator><![CDATA[Incocnito]]></dc:creator><pubDate>Sat, 16 Jun 2012 20:04:28 GMT</pubDate></item><item><title><![CDATA[Reply to explicit on Sat, 16 Jun 2012 20:05:55 GMT]]></title><description><![CDATA[<p>Solch &quot;komisch aussehende&quot; Zuweisungen sehen bisweilen so unauffällig aus, daß sich die vertracktesten Fehler dahinter hartnäckig verbergen können.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2224001</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2224001</guid><dc:creator><![CDATA[Caligulaminus]]></dc:creator><pubDate>Sat, 16 Jun 2012 20:05:55 GMT</pubDate></item><item><title><![CDATA[Reply to explicit on Sat, 16 Jun 2012 20:09:37 GMT]]></title><description><![CDATA[<p>Ein Beispiel wäre z.B. eine Container-Klasse, die man mit einem int initialisieren kann, um die Anzahl der Elemente festzulegen (geht z.B. bei std::vector)</p>
<p>Angenommen diese Klasse würde jetzt auch noch den operator == überladen, mit dem man überprüfen kann, ob alle Elemente beider Container identisch sind,<br />
so wäre das hier ein valider Code:</p>
<pre><code class="language-cpp">Container foo(5);
if (foo == 23)
{
    // ...
}
</code></pre>
<p>Hier würde implizit ein temporärer Container mit 23 Elementen erzeugt und dann verglichen, was jenseits jeder Logik ist...</p>
<p>Durch einen expliziten Konstruktor wird eben diese Konversion unterbunden.</p>
<p>Es gibt noch andere Situationen, wo man durch explicit Mechanismen des Compilers gezielt verbietet.</p>
<p>Ein Beispiel sind auch die neuen expliziten Cast-Operatoren (C++11).<br />
Man kann jetzt also explicit auch vor Cast-Operatoren platzieren um implizite Umwandlungen zu unterbinden.<br />
Eine Anwendung dafür sind Smart Pointer, welche früher auf das Safe-Bool-Idiom zurückgreifen mussten.</p>
<p>Das Hauptproblem, welches man mit explicit bekämpfen möchte, ist also, dass implizite Konversionen in Verbindung mit diversen Operatoren zu unerwartetem Verhalten führen. (Unerwartet hier z.B. für den Nutzer einer Bibliothek, der nicht besser weiß, was passiert und eigentlich etwas anderes vorhatte...)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2224002</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2224002</guid><dc:creator><![CDATA[DrakoXP]]></dc:creator><pubDate>Sat, 16 Jun 2012 20:09:37 GMT</pubDate></item><item><title><![CDATA[Reply to explicit on Sat, 16 Jun 2012 20:13:14 GMT]]></title><description><![CDATA[<p>yihaaa schrieb:</p>
<blockquote>
<p>Danke erst mal! Wie ich deim Beispiel entnehmen konnte sorgt explicite dafür, dass eine Klasse, etc... immer nur direkt initialisiert werden darf? Also mit den ( ) und nicht über Kopierkonstruktor oder Zuweisungsoperator?<br />
MfG</p>
</blockquote>
<p>Das ist so auch nicht richtig, der Copy-Konstruktor wird hier in keiner Weise angetastet ebensowenig wie der Zuweisungsoperator. Einzig und alleine implizite Konversionen werden unterbunden.<br />
Denn 5 ist z.B. vom Typ int und nicht vom Typ B.</p>
<pre><code class="language-cpp">B b1 = B(5); // das geht z.B. auch, ist allerdings in der Regel schlechter als b2
B b2(5);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2224004</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2224004</guid><dc:creator><![CDATA[DrakoXP]]></dc:creator><pubDate>Sat, 16 Jun 2012 20:13:14 GMT</pubDate></item><item><title><![CDATA[Reply to explicit on Sat, 16 Jun 2012 20:26:41 GMT]]></title><description><![CDATA[<p>Incocnito schrieb:</p>
<blockquote>
<p>Nee, für mich ist das nur Ästhetik und Ästhetik ist für mich Stil. Ich find's nur merkwürdig, dass man für soetwas, was man kinderleicht nachbauen kann, extra ein Schlüsselwort einführt.</p>
</blockquote>
<p>Ok. Dann bau mal nach ohne Schlüsselwort. Bin gespannt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2224005</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2224005</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Sat, 16 Jun 2012 20:26:41 GMT</pubDate></item></channel></rss>