<?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[Prefered way of object initialization]]></title><description><![CDATA[<p>Hi,<br />
ich habe mich seit laengerer Zeit wieder mit C++ beschaeftigt und seit C++11 gibt es ja auch die Moeglichkeit die Objekte mit {} zu initialisieren und ich habe mich gefragt ob es bei der einfachen Erstellung irgendeinen Vorteil hat.</p>
<p>e.g.:</p>
<pre><code>std::string alpha = &quot;mystring&quot;;
std::string bravo(&quot;mystring&quot;);
std::string charlie {&quot;mystring&quot;};

//bzw.: mein Codebeispiel
string secondKey{ line.substr(pos + 2, line.size()) };
</code></pre>
<p>Was genau ist der Unterschied zwischen Klammerinitialisierung und Konstruktorinitialiserung? Soweit ich mich erinnere wird ja bei der &quot;=&quot; Operation das Objekt erst erstellt und dann der Copy Assignment Operator benutzt um den Wert in den String zu kopieren, richtig?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/337981/prefered-way-of-object-initialization</link><generator>RSS for Node</generator><lastBuildDate>Wed, 15 Apr 2026 12:16:20 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/337981.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 15 May 2016 10:55:23 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Prefered way of object initialization on Sun, 15 May 2016 10:55:23 GMT]]></title><description><![CDATA[<p>Hi,<br />
ich habe mich seit laengerer Zeit wieder mit C++ beschaeftigt und seit C++11 gibt es ja auch die Moeglichkeit die Objekte mit {} zu initialisieren und ich habe mich gefragt ob es bei der einfachen Erstellung irgendeinen Vorteil hat.</p>
<p>e.g.:</p>
<pre><code>std::string alpha = &quot;mystring&quot;;
std::string bravo(&quot;mystring&quot;);
std::string charlie {&quot;mystring&quot;};

//bzw.: mein Codebeispiel
string secondKey{ line.substr(pos + 2, line.size()) };
</code></pre>
<p>Was genau ist der Unterschied zwischen Klammerinitialisierung und Konstruktorinitialiserung? Soweit ich mich erinnere wird ja bei der &quot;=&quot; Operation das Objekt erst erstellt und dann der Copy Assignment Operator benutzt um den Wert in den String zu kopieren, richtig?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2495812</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2495812</guid><dc:creator><![CDATA[Ruvi]]></dc:creator><pubDate>Sun, 15 May 2016 10:55:23 GMT</pubDate></item><item><title><![CDATA[Reply to Prefered way of object initialization on Sun, 15 May 2016 11:03:28 GMT]]></title><description><![CDATA[<p><a href="https://isocpp.org/wiki/faq/cpp11-language#uniform-init" rel="nofollow">https://isocpp.org/wiki/faq/cpp11-language#uniform-init</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2495813</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2495813</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Sun, 15 May 2016 11:03:28 GMT</pubDate></item><item><title><![CDATA[Reply to Prefered way of object initialization on Sun, 15 May 2016 21:56:02 GMT]]></title><description><![CDATA[<p>Ruvi schrieb:</p>
<blockquote>
<p>Soweit ich mich erinnere wird ja bei der &quot;=&quot; Operation das Objekt erst erstellt und dann der Copy Assignment Operator benutzt um den Wert in den String zu kopieren, richtig?</p>
</blockquote>
<p>Kommt drauf an. Bei deinem Beispiel würde alpha vom Compiler sehr wahrscheinlich zur selben version wie bravo gemacht, da es einfach unnötig ist an dieser Stelle ein temporäres Objekt zu erstellen nur um dann den copy constructor aufzurufen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2495844</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2495844</guid><dc:creator><![CDATA[Xebov]]></dc:creator><pubDate>Sun, 15 May 2016 21:56:02 GMT</pubDate></item><item><title><![CDATA[Reply to Prefered way of object initialization on Mon, 16 May 2016 11:24:41 GMT]]></title><description><![CDATA[<p>Xebov schrieb:</p>
<blockquote>
<p>Ruvi schrieb:</p>
<blockquote>
<p>Soweit ich mich erinnere wird ja bei der &quot;=&quot; Operation das Objekt erst erstellt und dann der Copy Assignment Operator benutzt um den Wert in den String zu kopieren, richtig?</p>
</blockquote>
<p>Kommt drauf an. Bei deinem Beispiel würde alpha vom Compiler sehr wahrscheinlich zur selben version wie bravo gemacht, da es einfach unnötig ist an dieser Stelle ein temporäres Objekt zu erstellen nur um dann den copy constructor aufzurufen.</p>
</blockquote>
<p>Nicht nur sehr wahrscheinlich, sondern garantiert. Wenn ein neues Objekt initialisiert wird, dann wird das nie durch den Assignment Operator gemacht. Das dort ein <code>'='</code> steht ist egal. Den Assignment Operator kriegt man nur wenn man einem schon vorhandenen Objekt etwas zuweißt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2495861</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2495861</guid><dc:creator><![CDATA[sebi707]]></dc:creator><pubDate>Mon, 16 May 2016 11:24:41 GMT</pubDate></item><item><title><![CDATA[Reply to Prefered way of object initialization on Mon, 16 May 2016 11:28:36 GMT]]></title><description><![CDATA[<p>Nachtrag: OK, ihr redet gar nicht über Assignment Operator, sondern über den Copy Constructor. Wann man den kriegt hat noch weniger damit zu tun ob man <code>'='</code> schreibt oder nicht, sondern allein damit mit was man das Objekt initialisieren möchte. Wenn du einen <code>std::string</code> mit einem anderen <code>std::string</code> initialisierst dann kriegst du den Copy Constructor. Für andere Sachen wie <code>const char*</code> gibts extra Overloads.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2495862</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2495862</guid><dc:creator><![CDATA[sebi707]]></dc:creator><pubDate>Mon, 16 May 2016 11:28:36 GMT</pubDate></item></channel></rss>