<?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[[erledigt, weil Denkfehler] Explicit Ctor(std::string) akzeptiert const char* ????]]></title><description><![CDATA[<p>Kurz und bündig hier der Quellcode:</p>
<pre><code class="language-cpp">#include &lt;stdexcept&gt;

struct DivisionDurchNullException : public std::domain_error
{
  explicit DivisionDurchNullException(std::string const&amp; what_arg) : std::domain_error(what_arg) {}
};

class Foo
{
public:
  Foo(int n)
  {
    if (n == 0) throw DivisionDurchNullException(&quot;Division durch Null beim Erstellen eines Foo-Objektes.&quot;);
    /*...*/
  }
};
</code></pre>
<p>Nun habe ich beim ctor der Exception explicit hingeschrieben, also dürfte er doch eigentlich die implizite Konvertierung von const char* nach std::string nicht akzeptieren oder?<br />
Er schluckts aber, ich bekomme noch nichtmal ne Warnung (MSVC 2008 express).</p>
<p>Hat jemand ne Erklärung?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/238498/erledigt-weil-denkfehler-explicit-ctor-std-string-akzeptiert-const-char</link><generator>RSS for Node</generator><lastBuildDate>Wed, 23 Sep 2026 00:29:34 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/238498.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 11 Apr 2009 11:48:49 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to [erledigt, weil Denkfehler] Explicit Ctor(std::string) akzeptiert const char* ???? on Sat, 11 Apr 2009 11:56:57 GMT]]></title><description><![CDATA[<p>Kurz und bündig hier der Quellcode:</p>
<pre><code class="language-cpp">#include &lt;stdexcept&gt;

struct DivisionDurchNullException : public std::domain_error
{
  explicit DivisionDurchNullException(std::string const&amp; what_arg) : std::domain_error(what_arg) {}
};

class Foo
{
public:
  Foo(int n)
  {
    if (n == 0) throw DivisionDurchNullException(&quot;Division durch Null beim Erstellen eines Foo-Objektes.&quot;);
    /*...*/
  }
};
</code></pre>
<p>Nun habe ich beim ctor der Exception explicit hingeschrieben, also dürfte er doch eigentlich die implizite Konvertierung von const char* nach std::string nicht akzeptieren oder?<br />
Er schluckts aber, ich bekomme noch nichtmal ne Warnung (MSVC 2008 express).</p>
<p>Hat jemand ne Erklärung?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1694397</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1694397</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Sat, 11 Apr 2009 11:56:57 GMT</pubDate></item><item><title><![CDATA[Reply to [erledigt, weil Denkfehler] Explicit Ctor(std::string) akzeptiert const char* ???? on Sat, 11 Apr 2009 11:55:22 GMT]]></title><description><![CDATA[<p>Explizit bedeutet doch nur, dass man keinen <code>std::string</code> in gewissen Kontexten als <code>DivisionDurchNullException</code> auffassen darf.</p>
<p>Also wenn du sowas hast (warum auch immer):</p>
<pre><code class="language-cpp">void Function(DivisionDurchNullException x);
</code></pre>
<p>Dann funktioniert der Aufruf nicht:</p>
<pre><code class="language-cpp">std::string Str = &quot;hallo&quot;;
Function(Str);
</code></pre>
<p>Dass ein <code>const char*</code> in einen <code>std::string</code> konvertierbar ist, liegt am <code>std::string</code> - dieser hat einen nicht expliziten Konstruktor für <code>const char*</code> .</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1694403</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1694403</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sat, 11 Apr 2009 11:55:22 GMT</pubDate></item><item><title><![CDATA[Reply to [erledigt, weil Denkfehler] Explicit Ctor(std::string) akzeptiert const char* ???? on Sat, 11 Apr 2009 11:54:53 GMT]]></title><description><![CDATA[<p>Auch der Comeau schluckt das, selbst im strict-mode.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1694407</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1694407</guid><dc:creator><![CDATA[Hui??]]></dc:creator><pubDate>Sat, 11 Apr 2009 11:54:53 GMT</pubDate></item><item><title><![CDATA[Reply to [erledigt, weil Denkfehler] Explicit Ctor(std::string) akzeptiert const char* ???? on Sat, 11 Apr 2009 11:56:35 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Explizit bedeutet doch nur, dass man keinen <code>std::string</code> in gewissen Kontexten als <code>DivisionDurchNullException</code> auffassen darf.</p>
</blockquote>
<p>Meep. Stimmt, Denkfehler meinerseits. Explicit bedeutet der Ctor kann nicht implizit aufgerufen werden, nicht dass das Argument nicht impllizit umgewandelt werden dürfte. Danke...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1694410</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1694410</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Sat, 11 Apr 2009 11:56:35 GMT</pubDate></item><item><title><![CDATA[Reply to [erledigt, weil Denkfehler] Explicit Ctor(std::string) akzeptiert const char* ???? on Sat, 11 Apr 2009 11:56:48 GMT]]></title><description><![CDATA[<p>Hui?? schrieb:</p>
<blockquote>
<p>Auch der Comeau schluckt das, selbst im strict-mode.</p>
</blockquote>
<p>Logo, weil nichts falsch ist. Ist wie Nexus gesagt hat.<br />
Simon</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1694411</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1694411</guid><dc:creator><![CDATA[theta]]></dc:creator><pubDate>Sat, 11 Apr 2009 11:56:48 GMT</pubDate></item><item><title><![CDATA[Reply to [erledigt, weil Denkfehler] Explicit Ctor(std::string) akzeptiert const char* ???? on Sat, 11 Apr 2009 11:58:01 GMT]]></title><description><![CDATA[<p>Das <code>explicit</code> bedeutet nur, dass du den Konstruktor explizit aufrufen musst und nicht eine Zuweisung für den Aufruf benutzen darfst. Die implizite Umwandlung von <code>const char *</code> in <code>const std::string &amp;</code> hat damit nichts zu tun <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/1694412</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1694412</guid><dc:creator><![CDATA[*rant*]]></dc:creator><pubDate>Sat, 11 Apr 2009 11:58:01 GMT</pubDate></item><item><title><![CDATA[Reply to [erledigt, weil Denkfehler] Explicit Ctor(std::string) akzeptiert const char* ???? on Sat, 11 Apr 2009 12:01:19 GMT]]></title><description><![CDATA[<p>/rant/ schrieb:</p>
<blockquote>
<p>Das <code>explicit</code> bedeutet nur, dass du den Konstruktor explizit aufrufen musst und nicht eine Zuweisung für den Aufruf benutzen darfst.</p>
</blockquote>
<p>Nicht nur - wie erwähnt kommt es in <em>keinem</em> Kontext zu einer impliziten Umwandlung. Der explizite Konstruktoraufruf ist die einzige Möglichkeit für eine Konvertierung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1694416</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1694416</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sat, 11 Apr 2009 12:01:19 GMT</pubDate></item><item><title><![CDATA[Reply to [erledigt, weil Denkfehler] Explicit Ctor(std::string) akzeptiert const char* ???? on Sat, 11 Apr 2009 16:53:16 GMT]]></title><description><![CDATA[<p>pumuckl schrieb:</p>
<blockquote>
<pre><code class="language-cpp">struct DivisionDurchNullException : public std::domain_error
{
  explicit DivisionDurchNullException(std::string const&amp; what_arg) : std::domain_error(what_arg) {}
};
</code></pre>
</blockquote>
<p>hab mich gerade über den string-parameter gewundert - warum nimmt <code>logic_error</code> eigentlich <code>std::string</code> statt <code>char*</code> ? ist das nicht gefährlich, weil im string-konstruktor <code>bad_alloc</code> geworfen werden könnte?</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/9960">@pumuckl</a>: warum heißt die struct nicht DivisionDurchNull<strong>Ausnahme</strong>? (nur halb ernst gemeint - mich schüttelts bloß bei denglisch) <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/1694539</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1694539</guid><dc:creator><![CDATA[wunderbär]]></dc:creator><pubDate>Sat, 11 Apr 2009 16:53:16 GMT</pubDate></item></channel></rss>