<?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[matrix double multiplikation als operator]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich wollte:</p>
<pre><code class="language-cpp">Matrix A;
...
// befüllen
...
Matrix B = -1.0*A;
</code></pre>
<p>Welchen Operator muss ich überladen damit ich das -1.0 links von meiner Klasse schreiben kann?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/288015/matrix-double-multiplikation-als-operator</link><generator>RSS for Node</generator><lastBuildDate>Sat, 18 Jul 2026 13:53:06 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/288015.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 08 Jun 2011 19:25:06 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to matrix double multiplikation als operator on Wed, 08 Jun 2011 19:25:06 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich wollte:</p>
<pre><code class="language-cpp">Matrix A;
...
// befüllen
...
Matrix B = -1.0*A;
</code></pre>
<p>Welchen Operator muss ich überladen damit ich das -1.0 links von meiner Klasse schreiben kann?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2075395</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2075395</guid><dc:creator><![CDATA[sumsum1]]></dc:creator><pubDate>Wed, 08 Jun 2011 19:25:06 GMT</pubDate></item><item><title><![CDATA[Reply to matrix double multiplikation als operator on Wed, 08 Jun 2011 19:33:35 GMT]]></title><description><![CDATA[<p>Wenn du multiplizieren willst, natürlich den operator* - hier in Form einer freien Funktion:</p>
<pre><code class="language-cpp">Matrix operator* (double faktor, const Matrix&amp; m);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2075401</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2075401</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Wed, 08 Jun 2011 19:33:35 GMT</pubDate></item><item><title><![CDATA[Reply to matrix double multiplikation als operator on Wed, 08 Jun 2011 19:41:42 GMT]]></title><description><![CDATA[<p>Wenn du sie nur negieren willst, kannst du den unären Vorzeichenoperator implementieren.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/10318">@CStoll</a> Rückgabe nicht <code>const</code> ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2075407</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2075407</guid><dc:creator><![CDATA[EOutOfResources]]></dc:creator><pubDate>Wed, 08 Jun 2011 19:41:42 GMT</pubDate></item><item><title><![CDATA[Reply to matrix double multiplikation als operator on Wed, 08 Jun 2011 19:46:35 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p>Wenn du multiplizieren willst, natürlich den operator* - hier in Form einer freien Funktion:</p>
<pre><code class="language-cpp">Matrix operator* (double faktor, const Matrix&amp; m);
</code></pre>
</blockquote>
<p>Danke für die schnelle Antwort aber ich bekomme bei</p>
<pre><code class="language-cpp">matrix &amp;operator*(double factor, const matrix &amp;rhs) const;
</code></pre>
<p>folgende Fehlermeldung</p>
<pre><code>error C2804: binary 'operator *' has too many parameters
</code></pre>
<p>mit VS 2010</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2075414</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2075414</guid><dc:creator><![CDATA[sumsum1]]></dc:creator><pubDate>Wed, 08 Jun 2011 19:46:35 GMT</pubDate></item><item><title><![CDATA[Reply to matrix double multiplikation als operator on Wed, 08 Jun 2011 19:48:12 GMT]]></title><description><![CDATA[<p>Du hast sie als Methode implementiert. Wie CStoll gesagt hat sollst du sie <strong>frei</strong> implementieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2075416</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2075416</guid><dc:creator><![CDATA[EOutOfResources]]></dc:creator><pubDate>Wed, 08 Jun 2011 19:48:12 GMT</pubDate></item><item><title><![CDATA[Reply to matrix double multiplikation als operator on Wed, 08 Jun 2011 19:51:37 GMT]]></title><description><![CDATA[<p>EOutOfResources schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/10318">@CStoll</a> Rückgabe nicht <code>const</code> ?</p>
</blockquote>
<p>Wenn du unbedingt darauf bestehst, kann man das natürlich machen <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>@sumsum1: Übrigens ist es eine schlechte Idee, aus einem arithmetischen Operator eine Referenz zurückzugeben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2075420</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2075420</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Wed, 08 Jun 2011 19:51:37 GMT</pubDate></item><item><title><![CDATA[Reply to matrix double multiplikation als operator on Wed, 08 Jun 2011 20:13:07 GMT]]></title><description><![CDATA[<p>Danke für die Hinweise an alle.</p>
<p>CStoll schrieb:</p>
<blockquote>
<p>@sumsum1: Übrigens ist es eine schlechte Idee, aus einem arithmetischen Operator eine Referenz zurückzugeben.</p>
</blockquote>
<p>Könntest du mir bitte ein Beispiel nennen warum es nicht gut ist? Immerhin geht es hier ja um eventuell unnötiges kopieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2075434</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2075434</guid><dc:creator><![CDATA[sumsum1]]></dc:creator><pubDate>Wed, 08 Jun 2011 20:13:07 GMT</pubDate></item><item><title><![CDATA[Reply to matrix double multiplikation als operator on Wed, 08 Jun 2011 20:22:30 GMT]]></title><description><![CDATA[<p>Kurze Antwort: Eine Referenz kannst du nur dann zurückgeben, wenn das referenzierte Objekt lange genug überlebt. Und dein Operator wird vermutlich ein lokales Objekt zurückgeben - und das überlebt nicht lange genug um etwas damit machen zu können.<br />
(tja, mitunter sind Kopien unvermeidlich)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2075437</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2075437</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Wed, 08 Jun 2011 20:22:30 GMT</pubDate></item><item><title><![CDATA[Reply to matrix double multiplikation als operator on Wed, 08 Jun 2011 20:29:51 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">matrix &amp;operator*(double factor, const matrix &amp;rhs) const{
   matrix ergebnis;//lokale variable
  for(...{
     for(...{
        ergebnis[j][i]=rhs[j][i]*factor;
  return ergebnis;//referenz auf lokale varieble rausgeben
}//lokale variable stirbt hier! die referenz zeigt auf toten speicher
</code></pre>
<p>Kommst nicht um die Kopie rum. Also im Prinzip nicht.<br />
Aber faktisch doch!!!</p>
<pre><code class="language-cpp">Matrix c=5*a;//hier zaubert ein schklauer compiler normalerweise und schreibt das ergebnis gleich nach c rein
</code></pre>
<p><a href="http://en.wikipedia.org/wiki/Return_value_optimization" rel="nofollow">http://en.wikipedia.org/wiki/Return_value_optimization</a> und NRVO</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2075438</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2075438</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Wed, 08 Jun 2011 20:29:51 GMT</pubDate></item><item><title><![CDATA[Reply to matrix double multiplikation als operator on Wed, 08 Jun 2011 20:53:51 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p>EOutOfResources schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/10318">@CStoll</a> Rückgabe nicht <code>const</code> ?</p>
</blockquote>
<p>Wenn du unbedingt darauf bestehst, kann man das natürlich machen <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>
</blockquote>
<p>Würde ich nicht. Bringt nicht wirklich Vorteile.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2075455</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2075455</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Wed, 08 Jun 2011 20:53:51 GMT</pubDate></item><item><title><![CDATA[Reply to matrix double multiplikation als operator on Wed, 08 Jun 2011 21:10:16 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p>(tja, mitunter sind Kopien unvermeidlich)</p>
</blockquote>
<p>Außer man heißt uBLAS oder Blitz++ <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/2075460</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2075460</guid><dc:creator><![CDATA[otze]]></dc:creator><pubDate>Wed, 08 Jun 2011 21:10:16 GMT</pubDate></item><item><title><![CDATA[Reply to matrix double multiplikation als operator on Thu, 09 Jun 2011 05:23:19 GMT]]></title><description><![CDATA[<p>otze schrieb:</p>
<blockquote>
<p>CStoll schrieb:</p>
<blockquote>
<p>(tja, mitunter sind Kopien unvermeidlich)</p>
</blockquote>
<p>Außer man heißt uBLAS oder Blitz++ <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>
</blockquote>
<p>Zumindest uBLAS hat eine unbrachbare Syntax, wofür das u wohl auch steht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2075510</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2075510</guid><dc:creator><![CDATA[sumsum1]]></dc:creator><pubDate>Thu, 09 Jun 2011 05:23:19 GMT</pubDate></item><item><title><![CDATA[Reply to matrix double multiplikation als operator on Thu, 09 Jun 2011 10:16:07 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Würde ich nicht. Bringt nicht wirklich Vorteile.</p>
</blockquote>
<p>Es kann Fehler verhindern.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2075610</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2075610</guid><dc:creator><![CDATA[EOutOfResources]]></dc:creator><pubDate>Thu, 09 Jun 2011 10:16:07 GMT</pubDate></item><item><title><![CDATA[Reply to matrix double multiplikation als operator on Thu, 09 Jun 2011 10:29:42 GMT]]></title><description><![CDATA[<p>EOutOfResources schrieb:</p>
<blockquote>
<p>Nexus schrieb:</p>
<blockquote>
<p>Würde ich nicht. Bringt nicht wirklich Vorteile.</p>
</blockquote>
<p>Es kann Fehler verhindern.</p>
</blockquote>
<p>Beispiel?<br />
Mir fällt gerade (vermutlich wegen Gurkenmangels) nur Mist ein wie</p>
<pre><code class="language-cpp">c=(a+b)*=2;//gäbe mit const einen compilerfehler
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2075620</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2075620</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Thu, 09 Jun 2011 10:29:42 GMT</pubDate></item><item><title><![CDATA[Reply to matrix double multiplikation als operator on Thu, 09 Jun 2011 10:30:35 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>Beispiel?</p>
</blockquote>
<pre><code class="language-cpp">//Rückgabe nicht const:
if(a * b = c)
{
  //Hoppla, ich wollte vergleichen aber es kompiliert
}
//Rückgabe const:
if(a * b = c)
{
  //Hoppla, ich wollte vergleichen aber Compilefehler
}
</code></pre>
<p>Scott Meyers vertritt die selbe Meinung in &quot;Effektiv C++&quot;.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2075621</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2075621</guid><dc:creator><![CDATA[EOutOfResources]]></dc:creator><pubDate>Thu, 09 Jun 2011 10:30:35 GMT</pubDate></item><item><title><![CDATA[Reply to matrix double multiplikation als operator on Thu, 09 Jun 2011 10:40:08 GMT]]></title><description><![CDATA[<p>EOutOfResources schrieb:</p>
<blockquote>
<pre><code class="language-cpp">//Rückgabe nicht const:
if(a * b = c)
{
  //Hoppla, ich wollte vergleichen aber es kompiliert
}
</code></pre>
</blockquote>
<p>Hier spuckt dir jeder vernünftige Compiler bei einer vernünftigen Warnungsstufe eine Warnung aus, dass du eine Zuweisung in der Bedingung stehen hast. Und als vernünftiger Entwickler siehst du natürlich zu, dass dein Code warnungsfrei compiliert und behebst das auch ohne const Rückgabe.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2075629</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2075629</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Thu, 09 Jun 2011 10:40:08 GMT</pubDate></item><item><title><![CDATA[Reply to matrix double multiplikation als operator on Thu, 09 Jun 2011 10:47:24 GMT]]></title><description><![CDATA[<p>Zur Erheiterung: Dieser Fehler fliegt, wenn ich matrix keinen operator bool schenke bei if(a*b=c):</p>
<pre><code>C:\src\research\tmpcpp\main.cpp||In function 'int main()':|
C:\src\research\tmpcpp\main.cpp|7|error: could not convert '((operator*((a, matrix()), (b, matrix())), ((const matrix&amp;)((const matrix*)(&amp; c)))), operator*((a, matrix()), (b, matrix())))' to 'bool'|
||=== Build finished: 1 errors, 0 warnings ===|
</code></pre>
<p>Im Prinzip hast Du wohl recht.<br />
Ich würde auch vorschlagen, darüber nachzudenken, noch weiter zu gehen, und den Zuweisungsoperator void zurückgeben zu lassen. Dann hat sich das const in diesem Beispiel von selbst erledigt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2075631</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2075631</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Thu, 09 Jun 2011 10:47:24 GMT</pubDate></item><item><title><![CDATA[Reply to matrix double multiplikation als operator on Thu, 09 Jun 2011 10:53:30 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>EOutOfResources schrieb:</p>
<blockquote>
<p>Nexus schrieb:</p>
<blockquote>
<p>Würde ich nicht. Bringt nicht wirklich Vorteile.</p>
</blockquote>
<p>Es kann Fehler verhindern.</p>
</blockquote>
<p>Beispiel?<br />
Mir fällt gerade (vermutlich wegen Gurkenmangels) nur Mist ein wie</p>
<pre><code class="language-cpp">c=(a+b)*=2;//gäbe mit const einen compilerfehler
</code></pre>
</blockquote>
<pre><code class="language-cpp">c=a+b;
</code></pre>
<p>Ist schon das perfekte Beispiel warum const Mist ist. Ohne const kann eine move-Zuweisung benutzt werden. Mit const müssen wir kopieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2075637</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2075637</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Thu, 09 Jun 2011 10:53:30 GMT</pubDate></item></channel></rss>