<?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[Frage zu Überladenem Konstruktor]]></title><description><![CDATA[<p>Ich bin gerade dabei, Template Funktionen zu lernen. Dabei habe ich eine Frage: Wenn ich zB 2 Konstruktoren habe</p>
<pre><code class="language-cpp">class Klasse
{
    Klasse(const std::string&amp;);
    template&lt;typename T&gt; Klasse(const T&amp;);
};
</code></pre>
<p>und ich erzeuge ein Objekt über einen string, wird dann immer der Konstruktor aufgerufen, der explizit das Verhalten bei Übergabe eines Strings regelt oder wird hier der Teplate Konstruktor aufgerufen? Ist es im Standard irgendwie festgeschrieben, dass bei einem solchen Fall der string Konstruktor die beste Übereinstimmung ist?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/238428/frage-zu-überladenem-konstruktor</link><generator>RSS for Node</generator><lastBuildDate>Wed, 23 Sep 2026 00:49:54 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/238428.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 10 Apr 2009 12:30:57 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Frage zu Überladenem Konstruktor on Fri, 10 Apr 2009 12:30:57 GMT]]></title><description><![CDATA[<p>Ich bin gerade dabei, Template Funktionen zu lernen. Dabei habe ich eine Frage: Wenn ich zB 2 Konstruktoren habe</p>
<pre><code class="language-cpp">class Klasse
{
    Klasse(const std::string&amp;);
    template&lt;typename T&gt; Klasse(const T&amp;);
};
</code></pre>
<p>und ich erzeuge ein Objekt über einen string, wird dann immer der Konstruktor aufgerufen, der explizit das Verhalten bei Übergabe eines Strings regelt oder wird hier der Teplate Konstruktor aufgerufen? Ist es im Standard irgendwie festgeschrieben, dass bei einem solchen Fall der string Konstruktor die beste Übereinstimmung ist?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1693933</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1693933</guid><dc:creator><![CDATA[BestMatch]]></dc:creator><pubDate>Fri, 10 Apr 2009 12:30:57 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Überladenem Konstruktor on Fri, 10 Apr 2009 13:02:27 GMT]]></title><description><![CDATA[<p>Es wird eigentlich immer die Version aufgerufen, die am meisten spezialisiert ist. Das heisst, wenn eine <code>const std::string&amp;</code> -Überladung existiert und du einen <code>std::string</code> übergibst, kommt diese zum Zug.</p>
<p>Der Template-Konstruktor sollte bestimmt nur ein Beispiel sein. Ich frage mich, was der hier bringen würde... <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/1693942</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1693942</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Fri, 10 Apr 2009 13:02:27 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Überladenem Konstruktor on Fri, 10 Apr 2009 13:16:04 GMT]]></title><description><![CDATA[<p>Der Sinn ist Folgender:<br />
Ich habe mir zur Übung eine &quot;BigNumber&quot; Klasse geschrieben. Objekte dieser Klasse erzeuge ich so:</p>
<pre><code class="language-cpp">BigNumber zahl(&quot;999999999999999999999999.99999&quot;);
</code></pre>
<p>Die Zahlen sind short-Arrays. Außerdem soll diese Klasse kompatibel zu den elementaren Typen sein. Eine solche Initialisierung soll auch möglich sein</p>
<pre><code class="language-cpp">BigNumber zahl(200.123);
</code></pre>
<p>Intern läuft dabei Folgendes ab</p>
<pre><code class="language-cpp">template&lt;typename T&gt; BigNumber::BigNumber(const T&amp; var)
{
    std::ostringstream Str;
    Str &lt;&lt; std::setprecision(400) &lt;&lt; var;
    std::string tmp(Str.str());
    (*this)=tmp;
}
</code></pre>
<p>Das heißt, die &quot;normale Initialisierung&quot; ist der Weg über std::string (bzw. const char*), während der &quot;Umweg&quot; von anderen Typen wieder über std::string läuft.<br />
Das ist der ganze Sinn dahinter <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1693946</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1693946</guid><dc:creator><![CDATA[BestMatch]]></dc:creator><pubDate>Fri, 10 Apr 2009 13:16:04 GMT</pubDate></item></channel></rss>