<?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[Frage zu konstanten Elementfunktionen]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe mal wieder eine Frage an die Profis hier.<br />
Eine Elementfunktion mache ich ja konstant wenn sie keine Eigenschaft verändert. Wenn ich nun in dieser konstanten Funktion doch einen Wert speicher möchte z.B. für einen Cache dann kann ich dies ja über const_cast erreichen, was aber teilweise auch zu undefiniertem Verhalten führen kann. Wie sieht es aus wenn ich in einer konstanten Elementfunktion eine nicht konstante Funktion aufrufen die wiederum einen Wert ändert, geht das?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/272418/frage-zu-konstanten-elementfunktionen</link><generator>RSS for Node</generator><lastBuildDate>Fri, 28 Aug 2026 22:18:06 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/272418.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 17 Aug 2010 12:50:13 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Frage zu konstanten Elementfunktionen on Tue, 17 Aug 2010 12:50:13 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe mal wieder eine Frage an die Profis hier.<br />
Eine Elementfunktion mache ich ja konstant wenn sie keine Eigenschaft verändert. Wenn ich nun in dieser konstanten Funktion doch einen Wert speicher möchte z.B. für einen Cache dann kann ich dies ja über const_cast erreichen, was aber teilweise auch zu undefiniertem Verhalten führen kann. Wie sieht es aus wenn ich in einer konstanten Elementfunktion eine nicht konstante Funktion aufrufen die wiederum einen Wert ändert, geht das?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1940984</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1940984</guid><dc:creator><![CDATA[cppfrager]]></dc:creator><pubDate>Tue, 17 Aug 2010 12:50:13 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu konstanten Elementfunktionen on Tue, 17 Aug 2010 12:52:11 GMT]]></title><description><![CDATA[<p>Ich bin mir gerade nicht sicher, eigentlich dürfte es nicht gehen.<br />
In solchen Fällen nimmt man üblicherweise <code>mutable</code> .</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1940986</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1940986</guid><dc:creator><![CDATA[ipsec]]></dc:creator><pubDate>Tue, 17 Aug 2010 12:52:11 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu konstanten Elementfunktionen on Tue, 17 Aug 2010 13:09:23 GMT]]></title><description><![CDATA[<p>cppfrager schrieb:</p>
<blockquote>
<p>Eine Elementfunktion mache ich ja konstant wenn sie keine Eigenschaft verändert. Wenn ich nun in dieser konstanten Funktion doch einen Wert speicher möchte z.B. für einen Cache dann kann ich dies ja über const_cast erreichen, was aber teilweise auch zu undefiniertem Verhalten führen kann. Wie sieht es aus wenn ich in einer konstanten Elementfunktion eine nicht konstante Funktion aufrufen die wiederum einen Wert ändert, geht das?</p>
</blockquote>
<p>Dazu würdest Du auch einen const_cast brauchen. UB bekommst Du dann, wenn Du ein &quot;physikalisch konstantes&quot; Objekt verändern willst.</p>
<p>Für das Zwischenspeichern von Ergebnissen, die den Objektzustand &quot;logisch gesehen&quot; nicht ändern, gibt es aber das Schlüsselwort <code>mutable</code> :</p>
<pre><code class="language-cpp">class foo
{
  int a, b;
  mutable int x;
  mutable bool xvalid;

  void updatex() const {
    x = a*b;
    xvalid = true;
  }

public:
  ...

  void seta(int a) {
    this-&gt;a = a;
    xvalid = false;
  }

  int getx() const {
    if (!xvalid) updatex();
    return x;
  }
  ...
};
</code></pre>
<p>Dieses Beispiel macht natürlich wenig Sinn, soll aber das Prinzip von <code>mutable</code> zeigen.</p>
<p>Edit: Upps! Dass ipsec schon auf mutable aufmerksam gemacht hat, habe ich übersehen. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1940994</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1940994</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Tue, 17 Aug 2010 13:09:23 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu konstanten Elementfunktionen on Tue, 17 Aug 2010 13:41:14 GMT]]></title><description><![CDATA[<p>Danke vielmals euch Beiden. Ich sehe gerade das in meinem Buch(&quot;Die C++ Programmiersprache&quot; von B.Stroustrup) mutable als nächstes rankommt. <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/1941015</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1941015</guid><dc:creator><![CDATA[cppfrager]]></dc:creator><pubDate>Tue, 17 Aug 2010 13:41:14 GMT</pubDate></item></channel></rss>