<?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[Funktionen]]></title><description><![CDATA[<p>Folgende Funktion bei mir will der Compiler nicht kompilieren:</p>
<pre><code class="language-cpp">float Distance(float x1, float y1, float z1, float x2, float y2, float z2) 
{
	return (float) sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2) + (z1 - z2) * (z1 - z2));
}
</code></pre>
<pre><code>error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: &quot;default-int&quot; wird von C++ nicht unterstützt.
1&gt;c:\dokumente und einstellungen\theo\eigene dateien\visual studio 2008\projects\mydll\main.cpp(222) : error C2059: Syntaxfehler: 'Konstante'
1&gt;c:\dokumente und einstellungen\theo\eigene dateien\visual studio 2008\projects\mydll\main.cpp(222) : error C2143: Syntaxfehler: Es fehlt ')' vor ';'
1&gt;c:\dokumente und einstellungen\theo\eigene dateien\visual studio 2008\projects\mydll\main.cpp(222) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: &quot;default-int&quot; wird von C++ nicht unterstützt.
1&gt;c:\dokumente und einstellungen\theo\eigene dateien\visual studio 2008\projects\mydll\main.cpp(222) : error C2078: Zu viele Initialisierungen
1&gt;c:\dokumente und einstellungen\theo\eigene dateien\visual studio 2008\projects\mydll\main.cpp(222) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: &quot;default-int&quot; wird von C++ nicht unterstützt.
1&gt;c:\dokumente und einstellungen\theo\eigene dateien\visual studio 2008\projects\mydll\main.cpp(222) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: &quot;default-int&quot; wird von C++ nicht unterstützt.
1&gt;c:\dokumente und einstellungen\theo\eigene dateien\visual studio 2008\projects\mydll\main.cpp(222) : error C2374: 'PI': Neudefinition; Mehrfachinitialisierung
</code></pre>
<p>Kann mir wer helfen ? <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>
<p>Vielen Dank<br />
Umsteiger</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/232498/funktionen</link><generator>RSS for Node</generator><lastBuildDate>Fri, 25 Sep 2026 07:51:45 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/232498.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 23 Jan 2009 13:23:36 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Funktionen on Fri, 23 Jan 2009 13:23:36 GMT]]></title><description><![CDATA[<p>Folgende Funktion bei mir will der Compiler nicht kompilieren:</p>
<pre><code class="language-cpp">float Distance(float x1, float y1, float z1, float x2, float y2, float z2) 
{
	return (float) sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2) + (z1 - z2) * (z1 - z2));
}
</code></pre>
<pre><code>error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: &quot;default-int&quot; wird von C++ nicht unterstützt.
1&gt;c:\dokumente und einstellungen\theo\eigene dateien\visual studio 2008\projects\mydll\main.cpp(222) : error C2059: Syntaxfehler: 'Konstante'
1&gt;c:\dokumente und einstellungen\theo\eigene dateien\visual studio 2008\projects\mydll\main.cpp(222) : error C2143: Syntaxfehler: Es fehlt ')' vor ';'
1&gt;c:\dokumente und einstellungen\theo\eigene dateien\visual studio 2008\projects\mydll\main.cpp(222) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: &quot;default-int&quot; wird von C++ nicht unterstützt.
1&gt;c:\dokumente und einstellungen\theo\eigene dateien\visual studio 2008\projects\mydll\main.cpp(222) : error C2078: Zu viele Initialisierungen
1&gt;c:\dokumente und einstellungen\theo\eigene dateien\visual studio 2008\projects\mydll\main.cpp(222) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: &quot;default-int&quot; wird von C++ nicht unterstützt.
1&gt;c:\dokumente und einstellungen\theo\eigene dateien\visual studio 2008\projects\mydll\main.cpp(222) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: &quot;default-int&quot; wird von C++ nicht unterstützt.
1&gt;c:\dokumente und einstellungen\theo\eigene dateien\visual studio 2008\projects\mydll\main.cpp(222) : error C2374: 'PI': Neudefinition; Mehrfachinitialisierung
</code></pre>
<p>Kann mir wer helfen ? <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>
<p>Vielen Dank<br />
Umsteiger</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1650841</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1650841</guid><dc:creator><![CDATA[c#Umsteiger]]></dc:creator><pubDate>Fri, 23 Jan 2009 13:23:36 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionen on Fri, 23 Jan 2009 13:27:48 GMT]]></title><description><![CDATA[<p>math-Header eingebunden?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1650845</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1650845</guid><dc:creator><![CDATA[_matze]]></dc:creator><pubDate>Fri, 23 Jan 2009 13:27:48 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionen on Fri, 23 Jan 2009 13:33:02 GMT]]></title><description><![CDATA[<p>PI definierst du doppelt. Vielleicht wurde der Header mehrfach eingebunden? In dem Fall helfen Include Guards (oder ein #pragma once am Anfang des Headers).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1650852</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1650852</guid><dc:creator><![CDATA[_matze]]></dc:creator><pubDate>Fri, 23 Jan 2009 13:33:02 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionen on Fri, 23 Jan 2009 13:39:50 GMT]]></title><description><![CDATA[<p>btw:</p>
<pre><code class="language-cpp">float Distance(float x1, float y1, float z1, float x2, float y2, float z2) 
{ 
    return (float) sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2) + (z1 - z2) * (z1 - z2)); 
} 

//=&gt;

float Distance(float x1, float y1, float z1, float x2, float y2, float z2) 
{
    x1 -= x2;
    y1 -= y2;
    z1 -= z2;
    const float distance_square = x1*x1 + y1*y1 + z1*z1;
    return static_cast &lt;float&gt; sqrt(distance_square); 
}
</code></pre>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1650861</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1650861</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Fri, 23 Jan 2009 13:39:50 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionen on Fri, 23 Jan 2009 18:29:48 GMT]]></title><description><![CDATA[<p>unskilled schrieb:</p>
<blockquote>
<pre><code class="language-cpp">return static_cast &lt;float&gt; sqrt(distance_square);
</code></pre>
</blockquote>
<p>Der Cast ist hier unnötig.</p>
<p>Um das Ganze etwas übersichtlicher zu machen, könnte man eine Klasse/Struktur für Punkte machen, die Operatoren überladen und eine Funktion für die Norm schreiben. Geht hier vielleicht etwas zu weit, aber es ist doch schön, eine solche Funktion zu haben: <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>
<pre><code class="language-cpp">float Distance(const Point&amp; Left, const Point&amp; Right)
{
    return Norm(Left - Right);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1651072</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1651072</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Fri, 23 Jan 2009 18:29:48 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionen on Fri, 23 Jan 2009 18:34:21 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<pre><code class="language-cpp">float Distance(const Point&amp; Left, const Point&amp; Right)
{
    return Norm(Left - Right);
}
</code></pre>
</blockquote>
<p>Was soll dein Norm machen?</p>
<p>wenn schon dann find ich das toller ^^</p>
<pre><code class="language-cpp">float Distance(Point Left, const Point&amp; Right)
{
    Left -= Right;
    return Dotproduct(Left, Left); //Kreuzprodukt mit sich selbst
}
</code></pre>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1651080</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1651080</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Fri, 23 Jan 2009 18:34:21 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionen on Fri, 23 Jan 2009 19:09:03 GMT]]></title><description><![CDATA[<p>unskilled schrieb:</p>
<blockquote>
<p>Was soll dein Norm machen?</p>
</blockquote>
<p>Die Länge eines Vektors zurückgeben. <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>
<p>unskilled schrieb:</p>
<blockquote>
<p>wenn schon dann find ich das toller ^^</p>
<pre><code class="language-cpp">float Distance(Point Left, const Point&amp; Right)
{
    Left -= Right;
    return Dotproduct(Left, Left); //Kreuzprodukt mit sich selbst
}
</code></pre>
</blockquote>
<p>Hm, mir gefällt nur schon die Signatur nicht. Ein Parameter als Kopie und ein anderer als Const-Referenz, obwohl beide gleichwertig sind - naja. Wieso beharrst du eigentlich so auf deinen arithmetischen Zuweisungsoperatoren? <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>
<p>Zudem müsstest du noch die Wurzel aus dem <strong>Skalar</strong>produkt ziehen...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1651108</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1651108</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Fri, 23 Jan 2009 19:09:03 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionen on Sat, 24 Jan 2009 12:34:24 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Hm, mir gefällt nur schon die Signatur nicht. Ein Parameter als Kopie und ein anderer als Const-Referenz, obwohl beide gleichwertig sind - naja.</p>
</blockquote>
<p>Es ist nun mal unsinnig beide als referenz zu übernehmen und dafür nen neues objekt zu erzeugen - die signatur ist nun mal so... ^^</p>
<p>Nexus schrieb:</p>
<blockquote>
<p>Wieso beharrst du eigentlich so auf deinen arithmetischen Zuweisungsoperatoren? <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>
</blockquote>
<p>Weils effektiver ist!? ^^<br />
Und keinerlei Nachteile hat außer vll die ungewohnte Signatur ^^</p>
<p>Nexus schrieb:</p>
<blockquote>
<p>Zudem müsstest du noch die Wurzel aus dem <strong>Skalar</strong>produkt ziehen...</p>
</blockquote>
<p>Verdammt -.- Wie peinlich - mehr Fehler konnte man ja gar nicht mehr da reinmachen ^^</p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1651352</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1651352</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Sat, 24 Jan 2009 12:34:24 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionen on Sat, 24 Jan 2009 13:15:28 GMT]]></title><description><![CDATA[<p>unskilled schrieb:</p>
<blockquote>
<p>Nexus schrieb:</p>
<blockquote>
<p>Hm, mir gefällt nur schon die Signatur nicht. Ein Parameter als Kopie und ein anderer als Const-Referenz, obwohl beide gleichwertig sind - naja.</p>
</blockquote>
<p>Es ist nun mal unsinnig beide als referenz zu übernehmen und dafür nen neues objekt zu erzeugen - die signatur ist nun mal so... ^^</p>
</blockquote>
<p>Finde ich auch, dass es nun mal Geschmackssache ist. Ist ja dasselbe, wie beim swap, ob da auch gleich per Kopie übergeben werden soll oder intern erzeugt.<br />
Soll jeder so machen, wie will (oder vorgegeben).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1651382</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1651382</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Sat, 24 Jan 2009 13:15:28 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionen on Sat, 24 Jan 2009 14:31:53 GMT]]></title><description><![CDATA[<p>Danke für die Zustimmung, aber:</p>
<p>drakon schrieb:</p>
<blockquote>
<p>Ist ja dasselbe, wie beim swap, ob da auch gleich per Kopie übergeben werden soll oder intern erzeugt.</p>
</blockquote>
<p>wie soll nen swap mit ner Kopie des/der Werte(s) funktionieren? Oo</p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1651434</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1651434</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Sat, 24 Jan 2009 14:31:53 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionen on Sat, 24 Jan 2009 14:39:39 GMT]]></title><description><![CDATA[<p>unskilled schrieb:</p>
<blockquote>
<p>Danke für die Zustimmung, aber:</p>
<p>drakon schrieb:</p>
<blockquote>
<p>Ist ja dasselbe, wie beim swap, ob da auch gleich per Kopie übergeben werden soll oder intern erzeugt.</p>
</blockquote>
<p>wie soll nen swap mit ner Kopie des/der Werte(s) funktionieren? Oo</p>
<p>bb</p>
</blockquote>
<p>Sorry, meinte den =-Operator. Dort wird ja normalerweise eine cont Ref. übergeben und dann ein lokales Objekt damit erzeugt und geswapt. Und da kann man auch direkt die Übergabe per Kopie machen und dann mit dem swapen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1651440</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1651440</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Sat, 24 Jan 2009 14:39:39 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionen on Sat, 24 Jan 2009 16:39:17 GMT]]></title><description><![CDATA[<p>drakon schrieb:</p>
<blockquote>
<p>Sorry, meinte den =-Operator. Dort wird ja normalerweise eine cont Ref. übergeben und dann ein lokales Objekt damit erzeugt und geswapt. Und da kann man auch direkt die Übergabe per Kopie machen und dann mit dem swapen.</p>
</blockquote>
<p>Macht ihr das wirklich immer so?<br />
Was spricht dagegen, es nicht über den swap weg zu implementieren?</p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1651529</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1651529</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Sat, 24 Jan 2009 16:39:17 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionen on Sat, 24 Jan 2009 17:02:37 GMT]]></title><description><![CDATA[<p>unskilled schrieb:</p>
<blockquote>
<p>drakon schrieb:</p>
<blockquote>
<p>Sorry, meinte den =-Operator. Dort wird ja normalerweise eine cont Ref. übergeben und dann ein lokales Objekt damit erzeugt und geswapt. Und da kann man auch direkt die Übergabe per Kopie machen und dann mit dem swapen.</p>
</blockquote>
<p>Macht ihr das wirklich immer so?<br />
Was spricht dagegen, es nicht über den swap weg zu implementieren?</p>
<p>bb</p>
</blockquote>
<p>Wie gesagt. Geschmackssache (abgesehen von Optimierungen). Ich persönlich mache es eigentlich so, dass ich eine lokale Kopie erzeuge und dann damit swape.<br />
Afaik kommt schlussendlich sowieso das gleiche raus nach dem compilen. (zumindest bei modernen Compilern).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1651552</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1651552</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Sat, 24 Jan 2009 17:02:37 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionen on Sat, 24 Jan 2009 17:11:35 GMT]]></title><description><![CDATA[<p>unskilled schrieb:</p>
<blockquote>
<p>Was spricht dagegen, es nicht über den swap weg zu implementieren?</p>
</blockquote>
<p>Was spricht denn dafür, Copy-Konstruktor und Destruktor doppelt zu implementieren?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1651558</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1651558</guid><dc:creator><![CDATA[fdsa]]></dc:creator><pubDate>Sat, 24 Jan 2009 17:11:35 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionen on Sat, 24 Jan 2009 22:55:10 GMT]]></title><description><![CDATA[<p>Wieso lautet dein Benutzername theo?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1651773</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1651773</guid><dc:creator><![CDATA[@Mario]]></dc:creator><pubDate>Sat, 24 Jan 2009 22:55:10 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionen on Sat, 24 Jan 2009 23:05:51 GMT]]></title><description><![CDATA[<p>fdsa schrieb:</p>
<blockquote>
<p>unskilled schrieb:</p>
<blockquote>
<p>Was spricht dagegen, es nicht über den swap weg zu implementieren?</p>
</blockquote>
<p>Was spricht denn dafür, Copy-Konstruktor und Destruktor doppelt zu implementieren?</p>
</blockquote>
<p>1. verschrieben <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_tongue"
      title=":-P"
      alt="😛"
    /> DTor-&gt;CTor nehm ich mal an ^^<br />
2. war die ganze zeit von der swap fkt ausgegangen die man idR für die nachfolgende spezialisierung von std::swap implementiert - aber ihr nennt die init-fkt ja auch immer swap ^^</p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1651777</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1651777</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Sat, 24 Jan 2009 23:05:51 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionen on Sat, 24 Jan 2009 23:57:43 GMT]]></title><description><![CDATA[<p>unskilled schrieb:</p>
<blockquote>
<p>1. verschrieben <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_tongue"
      title=":-P"
      alt="😛"
    /> DTor-&gt;CTor nehm ich mal an ^^</p>
</blockquote>
<p>Nein, ich hab mich mich verschrieben. Wenn man den Zuweisungs-Operator nicht mit copy&amp;swap macht, implementiert man nochmal genau das, was man in Destruktor und Copy-Konstruktor schonmal gemacht hat.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1651800</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1651800</guid><dc:creator><![CDATA[fdsa]]></dc:creator><pubDate>Sat, 24 Jan 2009 23:57:43 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionen on Sun, 25 Jan 2009 11:04:49 GMT]]></title><description><![CDATA[<p>fdsa schrieb:</p>
<blockquote>
<p>unskilled schrieb:</p>
<blockquote>
<p>1. verschrieben <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_tongue"
      title=":-P"
      alt="😛"
    /> DTor-&gt;CTor nehm ich mal an ^^</p>
</blockquote>
<p>Nein, ich hab mich mich verschrieben. Wenn man den Zuweisungs-Operator nicht mit copy&amp;swap macht, implementiert man nochmal genau das, was man in Destruktor und Copy-Konstruktor schonmal gemacht hat.</p>
</blockquote>
<p>Also ich habe im =-Operator und üblicherweise 3 Zeilen:</p>
<pre><code class="language-cpp">X::operator = (const X &amp;rhs)
{
   Destruct();
   Init(/*ggf parameter*/);
   return *this;
}

X::X (const X &amp;rhs)
{
   Init(/*ggf parameter*/);
}

X::~X () throw()
{
   Destruct();
}
</code></pre>
<p>Der einzige Unterschied ist eben, dass die Zuweisung bei einer Exception das alte Objekt löscht und das neue dann halt noch nicht konstruiert ist - aber imho ist das kein Nachteil...</p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1651905</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1651905</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Sun, 25 Jan 2009 11:04:49 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionen on Sun, 25 Jan 2009 11:46:46 GMT]]></title><description><![CDATA[<p>unskilled schrieb:</p>
<blockquote>
<p>Also ich habe im =-Operator und üblicherweise 3 Zeilen:</p>
<pre><code class="language-cpp">X::operator = (const X &amp;rhs)
{
   Destruct();
   Init(/*ggf parameter*/);
   return *this;
}

X::X (const X &amp;rhs)
{
   Init(/*ggf parameter*/);
}

X::~X () throw()
{
   Destruct();
}
</code></pre>
<p>Der einzige Unterschied ist eben, dass die Zuweisung bei einer Exception das alte Objekt löscht und das neue dann halt noch nicht konstruiert ist - aber imho ist das kein Nachteil...</p>
</blockquote>
<p>Nein Nein Nein Nein.<br />
Leben wir noch im Jahre 1998?</p>
<p>Der op= sieht immer so aus:</p>
<pre><code class="language-cpp">T const&amp; operator=(T const&amp; other) {
  T temp(other);
  swap(temp);
  return *this;
}
</code></pre>
<p>Keine Exception Sicherheit ist immer ein Nachteil. Wenn der op= naehmlich wirft ist dein Objekt kaputt. Alle Daten sind verloren. Das ist schlecht. Sehr schlecht sogar. Deshalb hat Gott uns Transaktionen geschenkt und Stroustrup hat sie uns in Form von Copy &amp; Swap ermoeglicht.</p>
<p>PS:<br />
die Init Funktion ist ja richtig 1998...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1651922</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1651922</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Sun, 25 Jan 2009 11:46:46 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionen on Sun, 25 Jan 2009 13:50:41 GMT]]></title><description><![CDATA[<p>Wenn eine exception beim =-op geworfen wird, kannst du iA eh nicht darauf reagieren... (oder fällt dir nen sinnvolles Bsp ein?)<br />
Und warum soll eine Zuweisung 3mal so lange brauchen wie man sie normalerweise implementieren könnte?</p>
<blockquote>
<p>die Init Funktion ist ja richtig 1998...</p>
</blockquote>
<p>Sie hilft einfach mal die Übersicht zu wahren und nicht zu letzt Code-Duplikationen zu vermeiden. Ich weiß ja nicht, was du bis zum nächsten Standard machst - aber ich kann bis dahin keinen CTor in nem anderen aufrufen - und deshalb bleibt nun mal nur den Ausweg mit Init()</p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1651991</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1651991</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Sun, 25 Jan 2009 13:50:41 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionen on Sun, 25 Jan 2009 13:57:52 GMT]]></title><description><![CDATA[<p>unskilled schrieb:</p>
<blockquote>
<pre><code class="language-cpp">float Distance(float x1, float y1, float z1, float x2, float y2, float z2) 
{
    x1 -= x2;
    y1 -= y2;
    z1 -= z2;
    const float distance_square = x1*x1 + y1*y1 + z1*z1;
    return static_cast &lt;float&gt; sqrt(distance_square); 
}
</code></pre>
</blockquote>
<p>Schreib doch gleich alles in Assembler :p<br />
Kann dein Compiler keine <a href="http://en.wikipedia.org/wiki/Common_subexpression_elimination" rel="nofollow">mehrfach verwendeten Teilausdrücke eliminieren</a>? Das ist eigentlich eine Standardtechnik ... dann kommt in der lesbaren und in der 'optimierten' Version auch der gleiche Code raus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1651999</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1651999</guid><dc:creator><![CDATA[Bashar]]></dc:creator><pubDate>Sun, 25 Jan 2009 13:57:52 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionen on Sun, 25 Jan 2009 14:02:09 GMT]]></title><description><![CDATA[<p>vermutlich kann er das, weil er von MS ist <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /><br />
aber ich denke nicht, dass er den -= operator nutzen würde - ich tippe mal auf den - operator... aber bin gerade zu faul das zu testen - vll hat ja nen anderer mehr lust und kann besser asm als ich das kann ; D</p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1652005</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1652005</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Sun, 25 Jan 2009 14:02:09 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionen on Sun, 25 Jan 2009 14:31:08 GMT]]></title><description><![CDATA[<p>unskilled schrieb:</p>
<blockquote>
<p>vermutlich kann er das, weil er von MS ist <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /><br />
aber ich denke nicht, dass er den -= operator nutzen würde - ich tippe mal auf den - operator... aber bin gerade zu faul das zu testen - vll hat ja nen anderer mehr lust und kann besser asm als ich das kann ; D</p>
</blockquote>
<p>du weisst schon dass es bei primitiven datentypen keinen unterschied zwischen - und -= gibt, oder?</p>
<p>wenn der compiler hier nicht richtig optimiert, dann stimmt etwas nicht.</p>
<p>merke: immer zuerst schoen und korrekt programmieren und _dann_ erst an performance denken wenn der profiler es dir gesagt hat.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1652015</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1652015</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Sun, 25 Jan 2009 14:31:08 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionen on Sun, 25 Jan 2009 14:32:20 GMT]]></title><description><![CDATA[<p>Shade Of Mine schrieb:</p>
<blockquote>
<p>das hier ist zB premature optimization die nichts bringt.</p>
</blockquote>
<p>genau.<br />
und weil premature optimization mein hobby ist, zeige ich mal, wie das richtig geht:</p>
<pre><code class="language-cpp">float Distance(float x1, float y1, float z1, float x2, float y2, float z2) 
{ 
    return sqrt(DistanceSquare(x1,y1,z1,x2,y2,z2); 
}
//und damit das klappt, braucht man noch
float DistanceSquare(float x1, float y1, float z1, float x2, float y2, float z2)
{
   return Square(x2-x1)+Square(y2-y1)+Square(z2-z1);
}
//und damit das klappt, braucht man noch
float Square(float x)
{
   return x*x;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1652031</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1652031</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Sun, 25 Jan 2009 14:32:20 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionen on Sun, 25 Jan 2009 14:53:14 GMT]]></title><description><![CDATA[<p>unskilled schrieb:</p>
<blockquote>
<p>Es ist nun mal unsinnig beide als referenz zu übernehmen und dafür nen neues objekt zu erzeugen - die signatur ist nun mal so... ^^</p>
</blockquote>
<p>Naja, wie gesagt Geschmackssache. Aber eigentlich kommt es schlussendlich nicht so drauf an.</p>
<p>unskilled schrieb:</p>
<blockquote>
<p>Weils effektiver ist!? ^^<br />
Und keinerlei Nachteile hat außer vll die ungewohnte Signatur ^^</p>
</blockquote>
<p>Naja, ich würde es trotzdem eher so machen. Das temporäre Objekt ( <code>Left - Right</code> ) kann womöglich wegoptimiert werden.</p>
<pre><code class="language-cpp">float Distance(const Point&amp; Left, const Point&amp; Right) 
{ 
    Point DistanceVec = Left - Right; 
    return Dotproduct(DistanceVec, DistanceVec);
}
</code></pre>
<p>unskilled schrieb:</p>
<blockquote>
<p>Macht ihr das wirklich immer so?<br />
Was spricht dagegen, es nicht über den swap weg zu implementieren?</p>
</blockquote>
<p>Zum Beispiel Exceptionsicherheit und Codeduplizierung. Siehe auch <a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-218760.html" rel="nofollow">diesen Thread</a>.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1652044</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1652044</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sun, 25 Jan 2009 14:53:14 GMT</pubDate></item></channel></rss>