<?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[Welche Schreibweise ist richtig?]]></title><description><![CDATA[<pre><code class="language-cpp">template&lt;typename T&gt;
class Vector2
{
public:
    Vector2&lt;T&gt;&amp; operator=(const Vector2&lt;T&gt;&amp; c)
    {
        m_x = c.x();
        m_y = c.y();
        memcpy(m_data, c.data(), sizeof(T)*2);
        return *this;
    }

// ODER:
    Vector2&amp; operator=(const Vector2&amp; c)
    {
        m_x = c.x();
        m_y = c.y();
        memcpy(m_data, c.data(), sizeof(T)*2);
        return *this;
    }

T m_x;
T m_y;
T m_data[2];
</code></pre>
<p>Welche der 2 Möglichkeiten ist richtig oder &quot;besser&quot;? Zugelassen werden vom Compiler beide...<br />
Danke.<br />
lg</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/252257/welche-schreibweise-ist-richtig</link><generator>RSS for Node</generator><lastBuildDate>Mon, 14 Sep 2026 13:27:07 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/252257.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 17 Oct 2009 02:52:26 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Welche Schreibweise ist richtig? on Sat, 17 Oct 2009 02:52:26 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">template&lt;typename T&gt;
class Vector2
{
public:
    Vector2&lt;T&gt;&amp; operator=(const Vector2&lt;T&gt;&amp; c)
    {
        m_x = c.x();
        m_y = c.y();
        memcpy(m_data, c.data(), sizeof(T)*2);
        return *this;
    }

// ODER:
    Vector2&amp; operator=(const Vector2&amp; c)
    {
        m_x = c.x();
        m_y = c.y();
        memcpy(m_data, c.data(), sizeof(T)*2);
        return *this;
    }

T m_x;
T m_y;
T m_data[2];
</code></pre>
<p>Welche der 2 Möglichkeiten ist richtig oder &quot;besser&quot;? Zugelassen werden vom Compiler beide...<br />
Danke.<br />
lg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1793662</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1793662</guid><dc:creator><![CDATA[C++R00ki3]]></dc:creator><pubDate>Sat, 17 Oct 2009 02:52:26 GMT</pubDate></item><item><title><![CDATA[Reply to Welche Schreibweise ist richtig? on Sat, 17 Oct 2009 09:10:45 GMT]]></title><description><![CDATA[<p>Es geht beides. Vector2 kann innerhalb dieser Klassen-Template-Definition wie Vector2&lt;T&gt; benutzt werden.</p>
<p>Besser ist jedoch, die Funktion ganz wegzulassen, da der vom Compiler generierte operator= genau das richtige tut.</p>
<p>Edit: Was soll das mit m_data[2] und memcpy??!!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1793701</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1793701</guid><dc:creator><![CDATA[Sebastian Pizer]]></dc:creator><pubDate>Sat, 17 Oct 2009 09:10:45 GMT</pubDate></item><item><title><![CDATA[Reply to Welche Schreibweise ist richtig? on Sat, 17 Oct 2009 12:50:40 GMT]]></title><description><![CDATA[<p>Sebastian Pizer schrieb:</p>
<blockquote>
<p>Es geht beides. Vector2 kann innerhalb dieser Klassen-Template-Definition wie Vector2&lt;T&gt; benutzt werden.</p>
<p>Besser ist jedoch, die Funktion ganz wegzulassen, da der vom Compiler generierte operator= genau das richtige tut.</p>
</blockquote>
<p>Schönen Dank <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>Edit: Was soll das mit m_data[2] und memcpy??!!</p>
</blockquote>
<p>Naja es ist die schnellste MÖglichkeit das zu kopieren... schreibe ich m_data = c.m_data kopiere ich ja nur den zeiger...<br />
lg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1793808</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1793808</guid><dc:creator><![CDATA[C++R00ki3]]></dc:creator><pubDate>Sat, 17 Oct 2009 12:50:40 GMT</pubDate></item><item><title><![CDATA[Reply to Welche Schreibweise ist richtig? on Sat, 17 Oct 2009 12:54:31 GMT]]></title><description><![CDATA[<p>C++R00ki3 schrieb:</p>
<blockquote>
<p>Naja es ist die schnellste MÖglichkeit das zu kopieren...</p>
</blockquote>
<p>Vor allem die unsicherste. <code>memcpy()</code> kopiert bitweise, das führt bei Klassen, die keine PODs sind, zu undefiniertem Verhalten.</p>
<p>Hier ist der eigene Zuweisungsoperator wie gesagt <strong>nicht</strong> nötig. Aber für andere Fälle, verwende <code>std::copy()</code> (nachzuschlagen auf <a href="http://www.cplusplus.com" rel="nofollow">www.cplusplus.com</a>):</p>
<pre><code class="language-cpp">std::copy(c.m_data, c.m_data + 2, m_data);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1793811</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1793811</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sat, 17 Oct 2009 12:54:31 GMT</pubDate></item><item><title><![CDATA[Reply to Welche Schreibweise ist richtig? on Sat, 17 Oct 2009 14:25:09 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>C++R00ki3 schrieb:</p>
<blockquote>
<p>Naja es ist die schnellste MÖglichkeit das zu kopieren...</p>
</blockquote>
<p>Vor allem die unsicherste. <code>memcpy()</code> kopiert bitweise, das führt bei Klassen, die keine PODs sind, zu undefiniertem Verhalten.</p>
<p>Hier ist der eigene Zuweisungsoperator wie gesagt <strong>nicht</strong> nötig. Aber für andere Fälle, verwende <code>std::copy()</code> (nachzuschlagen auf <a href="http://www.cplusplus.com" rel="nofollow">www.cplusplus.com</a>):</p>
<pre><code class="language-cpp">std::copy(c.m_data, c.m_data + 2, m_data);
</code></pre>
</blockquote>
<p>Naja, aber es ist eine Vector-Klasse auf die man so gar keinen Zugriff hat, ausser man verwendet den privat-namespace.<br />
Verwendet wird nur:<br />
typedef Vector2&lt;f32&gt; Vector2f;<br />
typedef Vector2&lt;u32&gt; Vector2i;<br />
Und dann ist ja T m_data[2] ein ganz stinknormales c-array. Aber ich werde Deinen Ratschlag beherzigen und std::copy nehmen :). Danke für den Tipp.<br />
lg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1793857</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1793857</guid><dc:creator><![CDATA[C++R00ki3]]></dc:creator><pubDate>Sat, 17 Oct 2009 14:25:09 GMT</pubDate></item><item><title><![CDATA[Reply to Welche Schreibweise ist richtig? on Sat, 17 Oct 2009 14:44:20 GMT]]></title><description><![CDATA[<p>C++R00ki3 schrieb:</p>
<blockquote>
<p>Naja, aber es ist eine Vector-Klasse auf die man so gar keinen Zugriff hat, ausser man verwendet den privat-namespace.</p>
</blockquote>
<p>Okay, dann würde ich aber wenigstens einen nicht so allgemeingültigen Namen wie <code>T</code> nehmen. Oder gleich immer <code>std::copy()</code> einsetzen, das geht genauso mit Integern und Floats. Dann hast du auch keine Probleme, wenn du später plötzlich doch einen anderen Typen verwenden willst.</p>
<p>C++R00ki3 schrieb:</p>
<blockquote>
<p>Aber ich werde Deinen Ratschlag beherzigen und std::copy nehmen :). Danke für den Tipp.</p>
</blockquote>
<p>Das heisst, du wirst meinen Ratschlag <strong>nicht</strong> beherzigen. <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>Ich sprach mich ja wie Sebastian Pizer dafür aus, den compilergenerierten Zuweisungsoperator zu verwenden. Denke an die Regel der Grossen Drei: Sobald du eine der drei Funktionen Kopierkonstruktor, Zuweisungsoperator oder Destruktor selbst definierst, solltest du im Normalfall die anderen beiden auch implementieren. Hier besteht aber kein Anlass dazu, weil der Compiler genau das Richtige tut.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1793862</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1793862</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sat, 17 Oct 2009 14:44:20 GMT</pubDate></item><item><title><![CDATA[Reply to Welche Schreibweise ist richtig? on Sat, 17 Oct 2009 15:08:47 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>C++R00ki3 schrieb:</p>
<blockquote>
<p>Naja, aber es ist eine Vector-Klasse auf die man so gar keinen Zugriff hat, ausser man verwendet den privat-namespace.</p>
</blockquote>
<p>Okay, dann würde ich aber wenigstens einen nicht so allgemeingültigen Namen wie <code>T</code> nehmen. Oder gleich immer <code>std::copy()</code> einsetzen, das geht genauso mit Integern und Floats. Dann hast du auch keine Probleme, wenn du später plötzlich doch einen anderen Typen verwenden willst.</p>
<p>C++R00ki3 schrieb:</p>
<blockquote>
<p>Aber ich werde Deinen Ratschlag beherzigen und std::copy nehmen :). Danke für den Tipp.</p>
</blockquote>
<p>Das heisst, du wirst meinen Ratschlag <strong>nicht</strong> beherzigen. <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>Ich sprach mich ja wie Sebastian Pizer dafür aus, den compilergenerierten Zuweisungsoperator zu verwenden. Denke an die Regel der Grossen Drei: Sobald du eine der drei Funktionen Kopierkonstruktor, Zuweisungsoperator oder Destruktor selbst definierst, solltest du im Normalfall die anderen beiden auch implementieren. Hier besteht aber kein Anlass dazu, weil der Compiler genau das Richtige tut.</p>
</blockquote>
<p>Sorry wenn ich nochmal dumm frage:<br />
Aber wird das Array dann wirklich korrekt kopiert? Dachte immer dass man genau für sowas dann denn operator= braucht... wenn er das hier richtig macht, wann genau braucht man dann diesen operator (ausser man möchte eine Klasse nur partiell kopieren)? Jetzt bin ich verwirrt :D.<br />
lg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1793870</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1793870</guid><dc:creator><![CDATA[C++R00ki3]]></dc:creator><pubDate>Sat, 17 Oct 2009 15:08:47 GMT</pubDate></item><item><title><![CDATA[Reply to Welche Schreibweise ist richtig? on Sat, 17 Oct 2009 15:12:01 GMT]]></title><description><![CDATA[<p>Ja, das <strong>Array</strong> wird kopiert. Ein Array ist schliesslich eine Sammlung von mehreren Objekten, die hintereinander im Speicher liegen.</p>
<p>Anders wäre es bei einem <strong>Zeiger</strong>, dem man mit <code>new</code> Speicher zuweist. Der Zeiger hält dann nur die Adresse des Speicherbereichs, in dem die eigentlichen Elemente liegen. Ein Array hingegen hält die Elemente gleich selbst, ist also kein Verweis.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1793871</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1793871</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sat, 17 Oct 2009 15:12:01 GMT</pubDate></item><item><title><![CDATA[Reply to Welche Schreibweise ist richtig? on Sun, 18 Oct 2009 10:36:11 GMT]]></title><description><![CDATA[<p>Die eigentliche Frage ist aber, wofür benötigst du dieses Array bei einem 2D-Vector (denn x und y hast du ja schon definiert und aus mehr Membern sollte ein Vector auch nicht bestehen)???</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1794134</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1794134</guid><dc:creator><![CDATA[Th69]]></dc:creator><pubDate>Sun, 18 Oct 2009 10:36:11 GMT</pubDate></item></channel></rss>