<?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[Rückgabe und Übergabe]]></title><description><![CDATA[<p>Nachfolgend eine kleine Klasse zur Verwaltung von Schachzügen:</p>
<pre><code class="language-cpp">////
//// move class
////

class Move {
public:

  // constants

  static const int MOVE_NONE = 0;
  static const int MOVE_MASK = 0x1FFF;

  // functions

  void to_string(char * string) const;

  // get move information

  inline int move(void) const {
    return m;
  }

  inline int to(void) const {
    return m &amp; 63;
  }

  inline int from(void) const {
    return (m &gt;&gt; 6) &amp; 63;
  }

  inline int piece_promoted(void) const {
    return (m &gt;&gt; 12) &amp; 7;
  }

  // get move flags

  inline bool is_promotion(void) const {
    return (m &amp; IS_PROMOTION) != 0;
  }

  inline bool is_enpassant(void) const {
    return (m &amp; IS_ENPASSANT) != 0;
  }

  inline bool is_castle(void) const {
    return (m &amp; IS_CASTLE) != 0;
  }

  inline bool is_promotion_enpassant_castle(void) const {
    return (m &amp; (IS_PROMOTION | IS_ENPASSANT | IS_CASTLE)) != 0;
  }

  // make moves

  static inline int make_move(int from, int to) {
    return to + (from &lt;&lt; 6);
  }

  static inline int make_promotion(int from, int to, int piece_promoted) {
    return to + (from &lt;&lt; 6) + (piece_promoted &lt;&lt; 12);
  }

  static inline int make_enpassant(int from, int to) {
    return to + (from &lt;&lt; 6) + IS_ENPASSANT;
  }

  static inline int make_castle(int from, int to) {
    return to + (from &lt;&lt; 6) + IS_CASTLE;
  }

private:

  // flags

  static const int IS_PROMOTION = 7 &lt;&lt; 12;
  static const int IS_ENPASSANT = 1 &lt;&lt; 15;
  static const int IS_CASTLE = 1 &lt;&lt; 16;

  // move

  int m;
};
</code></pre>
<p>Da die Klasse nur 4 Byte gross ist, kann ich doch vollkommen problemlos call by value machen. Sehe ich es richtig, dass die Verwendung dieser Klasse genauso schnell gehen sollte, wie die Verwendung eines einfachen Integers?</p>
<p>Wenn dem so ist, kann ich auch Klassen als Rückgabewerte aus Funktionen herauskopieren?</p>
<p>Danke!</p>
<p>PS: Ich weiss, es fehlt der Konstruktor. Ist auch noch im Bau...</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/256197/rückgabe-und-übergabe</link><generator>RSS for Node</generator><lastBuildDate>Fri, 11 Sep 2026 16:51:22 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/256197.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 09 Dec 2009 14:36:42 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Rückgabe und Übergabe on Wed, 09 Dec 2009 14:36:42 GMT]]></title><description><![CDATA[<p>Nachfolgend eine kleine Klasse zur Verwaltung von Schachzügen:</p>
<pre><code class="language-cpp">////
//// move class
////

class Move {
public:

  // constants

  static const int MOVE_NONE = 0;
  static const int MOVE_MASK = 0x1FFF;

  // functions

  void to_string(char * string) const;

  // get move information

  inline int move(void) const {
    return m;
  }

  inline int to(void) const {
    return m &amp; 63;
  }

  inline int from(void) const {
    return (m &gt;&gt; 6) &amp; 63;
  }

  inline int piece_promoted(void) const {
    return (m &gt;&gt; 12) &amp; 7;
  }

  // get move flags

  inline bool is_promotion(void) const {
    return (m &amp; IS_PROMOTION) != 0;
  }

  inline bool is_enpassant(void) const {
    return (m &amp; IS_ENPASSANT) != 0;
  }

  inline bool is_castle(void) const {
    return (m &amp; IS_CASTLE) != 0;
  }

  inline bool is_promotion_enpassant_castle(void) const {
    return (m &amp; (IS_PROMOTION | IS_ENPASSANT | IS_CASTLE)) != 0;
  }

  // make moves

  static inline int make_move(int from, int to) {
    return to + (from &lt;&lt; 6);
  }

  static inline int make_promotion(int from, int to, int piece_promoted) {
    return to + (from &lt;&lt; 6) + (piece_promoted &lt;&lt; 12);
  }

  static inline int make_enpassant(int from, int to) {
    return to + (from &lt;&lt; 6) + IS_ENPASSANT;
  }

  static inline int make_castle(int from, int to) {
    return to + (from &lt;&lt; 6) + IS_CASTLE;
  }

private:

  // flags

  static const int IS_PROMOTION = 7 &lt;&lt; 12;
  static const int IS_ENPASSANT = 1 &lt;&lt; 15;
  static const int IS_CASTLE = 1 &lt;&lt; 16;

  // move

  int m;
};
</code></pre>
<p>Da die Klasse nur 4 Byte gross ist, kann ich doch vollkommen problemlos call by value machen. Sehe ich es richtig, dass die Verwendung dieser Klasse genauso schnell gehen sollte, wie die Verwendung eines einfachen Integers?</p>
<p>Wenn dem so ist, kann ich auch Klassen als Rückgabewerte aus Funktionen herauskopieren?</p>
<p>Danke!</p>
<p>PS: Ich weiss, es fehlt der Konstruktor. Ist auch noch im Bau...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1820128</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1820128</guid><dc:creator><![CDATA[Tomahawk]]></dc:creator><pubDate>Wed, 09 Dec 2009 14:36:42 GMT</pubDate></item><item><title><![CDATA[Reply to Rückgabe und Übergabe on Wed, 09 Dec 2009 14:38:48 GMT]]></title><description><![CDATA[<p>Es gibt für den Extremfall auch Referenzen...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1820130</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1820130</guid><dc:creator><![CDATA[ggfjgfj]]></dc:creator><pubDate>Wed, 09 Dec 2009 14:38:48 GMT</pubDate></item><item><title><![CDATA[Reply to Rückgabe und Übergabe on Wed, 09 Dec 2009 14:42:21 GMT]]></title><description><![CDATA[<p>Habe zwar nicht viel mit Programmieren zu tun, aber</p>
<p>1. das weiss ich auch<br />
2. das war nicht meine Frage</p>
<p>Danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1820131</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1820131</guid><dc:creator><![CDATA[Tomahaw]]></dc:creator><pubDate>Wed, 09 Dec 2009 14:42:21 GMT</pubDate></item><item><title><![CDATA[Reply to Rückgabe und Übergabe on Wed, 09 Dec 2009 14:43:26 GMT]]></title><description><![CDATA[<p>Tomahawk schrieb:</p>
<blockquote>
<p>Da die Klasse nur 4 Byte gross ist, kann ich doch vollkommen problemlos call by value machen.</p>
</blockquote>
<p>Da du einen trivialen Konstruktor hast: Ja.</p>
<blockquote>
<p>Sehe ich es richtig, dass die Verwendung dieser Klasse genauso schnell gehen sollte, wie die Verwendung eines einfachen Integers?</p>
</blockquote>
<p>Da du einen trivialen Konstruktor hast: Ja.</p>
<blockquote>
<p>Wenn dem so ist, kann ich auch Klassen als Rückgabewerte aus Funktionen herauskopieren?</p>
</blockquote>
<p>Ja.</p>
<blockquote>
<p>PS: Ich weiss, es fehlt der Konstruktor. Ist auch noch im Bau...</p>
</blockquote>
<p>Na, toll. Vergiss meine obigen Antworten, bis ich die Konstruktoren gesehen habe.</p>
<p>P.S.:<br />
Ich habe den Eindruck, dass du dich viel zu sehr mir verfrühter Mikrooptimierung aufhälst. Dein Schachprogramm hast du schon vor Monaten angefangen. Du wärest längst fertig, wenn du erstmal programmiert hättest, dann mit einem Profiler die teuerste Funktion gesucht hättest und diese optimiert hättest. Das Ergebnis wäre genauso schnell und viel zuverlässiger als alles was du mit deiner jetzigen Vorgehensweise in den nächsten Monaten erreichen wirst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1820134</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1820134</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Wed, 09 Dec 2009 14:43:26 GMT</pubDate></item><item><title><![CDATA[Reply to Rückgabe und Übergabe on Wed, 09 Dec 2009 15:21:43 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>Ich habe den Eindruck, dass du dich viel zu sehr mir verfrühter Mikrooptimierung aufhälst. Dein Schachprogramm hast du schon vor Monaten angefangen. Du wärest längst fertig, wenn du erstmal programmiert hättest, dann mit einem Profiler die teuerste Funktion gesucht hättest und diese optimiert hättest. Das Ergebnis wäre genauso schnell und viel zuverlässiger als alles was du mit deiner jetzigen Vorgehensweise in den nächsten Monaten erreichen wirst.</p>
</blockquote>
<p>Ich hab´ da grad ein Deja Vue ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1820160</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1820160</guid><dc:creator><![CDATA[DocShoe]]></dc:creator><pubDate>Wed, 09 Dec 2009 15:21:43 GMT</pubDate></item></channel></rss>