<?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[const- und nicht-const-Variante einer Methode basteln]]></title><description><![CDATA[<p>Hi,</p>
<p>Ich habe eine Methode, welche ein Element aus einem Container-Attribut sucht und zurückgibt. Im Prinzip möchte ich eine const- und eine nicht-const-Version anbieten.</p>
<p>Die Funktionalität ist aber dieselbe. Wie kann ich jetzt die jeweils andere Methode nutzen?</p>
<p>Ich habe probiert, aus der nicht-const-Variante einfach die const-Variante aufzurufen und mit nem const_cast das const zu killen und das dann zurückzuliefern. Führt aber zu Endlosrekursion, auch wenn ich schreibe:<br />
const* element = getElement();<br />
und er damit doch eigentlich die const-Variante von getElement() aufrufen sollte?</p>
<p>Ich hoffe, die Infos reichen und man kann mir bereits so allgemein helfen, wie ich gefragt habe. Sonst liefer ich auch Beispielcode. <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>Viele Grüße und danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/278771/const-und-nicht-const-variante-einer-methode-basteln</link><generator>RSS for Node</generator><lastBuildDate>Mon, 24 Aug 2026 05:06:15 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/278771.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 12 Dec 2010 21:51:01 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to const- und nicht-const-Variante einer Methode basteln on Sun, 12 Dec 2010 21:51:01 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>Ich habe eine Methode, welche ein Element aus einem Container-Attribut sucht und zurückgibt. Im Prinzip möchte ich eine const- und eine nicht-const-Version anbieten.</p>
<p>Die Funktionalität ist aber dieselbe. Wie kann ich jetzt die jeweils andere Methode nutzen?</p>
<p>Ich habe probiert, aus der nicht-const-Variante einfach die const-Variante aufzurufen und mit nem const_cast das const zu killen und das dann zurückzuliefern. Führt aber zu Endlosrekursion, auch wenn ich schreibe:<br />
const* element = getElement();<br />
und er damit doch eigentlich die const-Variante von getElement() aufrufen sollte?</p>
<p>Ich hoffe, die Infos reichen und man kann mir bereits so allgemein helfen, wie ich gefragt habe. Sonst liefer ich auch Beispielcode. <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>Viele Grüße und danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1993508</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1993508</guid><dc:creator><![CDATA[Eisflamme]]></dc:creator><pubDate>Sun, 12 Dec 2010 21:51:01 GMT</pubDate></item><item><title><![CDATA[Reply to const- und nicht-const-Variante einer Methode basteln on Sun, 12 Dec 2010 22:03:49 GMT]]></title><description><![CDATA[<p>Eisflamme schrieb:</p>
<blockquote>
<p>Ich habe probiert, aus der nicht-const-Variante einfach die const-Variante aufzurufen und mit nem const_cast das const zu killen und das dann zurückzuliefern. Führt aber zu Endlosrekursion, auch wenn ich schreibe:<br />
const* element = getElement();<br />
und er damit doch eigentlich die const-Variante von getElement() aufrufen sollte?</p>
</blockquote>
<p>Er ruft trotzdem die nicht-const Funktion auf, da C++ die passende Funktion nicht anhand der Verwendung des Returnwertes sucht, sondern nur anhand der Parameter (inklusive dem impliziten &quot;this&quot; Parameter).<br />
Da &quot;this&quot; nicht const ist wird die nicht-const Funktion aufgerufen.<br />
So geht's:</p>
<pre><code class="language-cpp">const* element = static_cast&lt;T const*&gt;(this)-&gt;getElement();
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1993519</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1993519</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Sun, 12 Dec 2010 22:03:49 GMT</pubDate></item><item><title><![CDATA[Reply to const- und nicht-const-Variante einer Methode basteln on Sun, 12 Dec 2010 23:40:32 GMT]]></title><description><![CDATA[<p>Warum nicht andersrum? Die const-Version ruft die non-const-Version auf und spendiert dem Ergebnis noch ein const vor dem Verlassen. Dafür kannst du nen extra Methodennamen für die interne non-const-Suche verwenden (das würde ich wegen der Klarheit bevorzugen) oder mit nem Template das const aus this raushauen, ungefähr so:</p>
<pre><code class="language-cpp">class Foo
{
public:
  search() const { return const intern_search(); }
  search() { return intern_search(); }

private:
  intern_search() const;
};

//oder:
template&lt;class T&gt;
struct StripConst
{
  typedef T Type;
};

template&lt;class T&gt;
struct StripConst&lt;const T&gt;
{
  typedef T Type;
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1993532</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1993532</guid><dc:creator><![CDATA[Michael E.]]></dc:creator><pubDate>Sun, 12 Dec 2010 23:40:32 GMT</pubDate></item><item><title><![CDATA[Reply to const- und nicht-const-Variante einer Methode basteln on Sun, 12 Dec 2010 23:37:45 GMT]]></title><description><![CDATA[<p>Michael E. schrieb:</p>
<blockquote>
<p>Warum nicht andersrum? Die const-Version ruft die non-const-Version auf</p>
</blockquote>
<p>So rum ist doch blöd.<br />
Wenn die non-const-Version das Objekt ändert, ändert die const-Version auch das Objekt, ohne das man das merkt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1993548</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1993548</guid><dc:creator><![CDATA[Jockelx]]></dc:creator><pubDate>Sun, 12 Dec 2010 23:37:45 GMT</pubDate></item><item><title><![CDATA[Reply to const- und nicht-const-Variante einer Methode basteln on Sun, 12 Dec 2010 23:43:04 GMT]]></title><description><![CDATA[<p>Jockelx schrieb:</p>
<blockquote>
<p>Michael E. schrieb:</p>
<blockquote>
<p>Warum nicht andersrum? Die const-Version ruft die non-const-Version auf</p>
</blockquote>
<p>So rum ist doch blöd.<br />
Wenn die non-const-Version das Objekt ändert, ändert die const-Version auch das Objekt, ohne das man das merkt.</p>
</blockquote>
<p>idR aendert die non-const Variante das Objekt nicht, sondern gibt ein handle auf einen internen Wert zurueck. Denn wenn die non-const Variante das Objekt aendern wuerde, dann waere es schwer dazu eine passende const Variante zu machen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1993550</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1993550</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Sun, 12 Dec 2010 23:43:04 GMT</pubDate></item><item><title><![CDATA[Reply to const- und nicht-const-Variante einer Methode basteln on Sun, 12 Dec 2010 23:44:16 GMT]]></title><description><![CDATA[<p>Jockelx schrieb:</p>
<blockquote>
<p>Michael E. schrieb:</p>
<blockquote>
<p>Warum nicht andersrum? Die const-Version ruft die non-const-Version auf</p>
</blockquote>
<p>So rum ist doch blöd.<br />
Wenn die non-const-Version das Objekt ändert, ändert die const-Version auch das Objekt, ohne das man das merkt.</p>
</blockquote>
<p>Hab mich vielleicht etwas missverständlich ausgedrückt. <code>intern_search</code> soll ein non-const-Objekt zurückgeben, aber selbst const sein. Diesem non-const-return-Objekt kann man im const-search dann noch ein const spendieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1993551</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1993551</guid><dc:creator><![CDATA[Michael E.]]></dc:creator><pubDate>Sun, 12 Dec 2010 23:44:16 GMT</pubDate></item><item><title><![CDATA[Reply to const- und nicht-const-Variante einer Methode basteln on Sun, 12 Dec 2010 23:56:14 GMT]]></title><description><![CDATA[<p>@Shade Of Mine: Scherzkeks. Das die non-const-Version das Objekt momentan nicht ändert ist klar.<br />
Aber wenn ich 3 Monate später denke, dass das gut wäre, dann hätte ich gerne 'nen Kompilerfehler, wenn die const-Variante dadurch dann auch das Objekt ändert.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/20068">@Michael</a>:<br />
Ja, hab dich falsch verstanden. So tritt das Problem natürlich nicht auf.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1993558</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1993558</guid><dc:creator><![CDATA[Jockelx]]></dc:creator><pubDate>Sun, 12 Dec 2010 23:56:14 GMT</pubDate></item><item><title><![CDATA[Reply to const- und nicht-const-Variante einer Methode basteln on Mon, 13 Dec 2010 10:00:16 GMT]]></title><description><![CDATA[<p>Eisflamme schrieb:</p>
<blockquote>
<p>Hi,</p>
<p>Ich habe eine Methode, welche ein Element aus einem Container-Attribut sucht und zurückgibt. Im Prinzip möchte ich eine const- und eine nicht-const-Version anbieten.</p>
<p>Die Funktionalität ist aber dieselbe. Wie kann ich jetzt die jeweils andere Methode nutzen?</p>
</blockquote>
<p>Komt drauf an. Wie sieht denn die Klasse aus? Eventuell könnte man das so machen:</p>
<pre><code class="language-cpp">class dings
{
public:
  ...
  string const&amp; zeile(int idx) const;

  string &amp; zeile(int idx)
  {
    dings const&amp; self = this; // &lt;-- das const ist hier wichtig
    return const_cast&lt;string&amp;&gt;(self.zeile(idx));
  }
  ...
private:
  ...
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1993618</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1993618</guid><dc:creator><![CDATA[1729]]></dc:creator><pubDate>Mon, 13 Dec 2010 10:00:16 GMT</pubDate></item><item><title><![CDATA[Reply to const- und nicht-const-Variante einer Methode basteln on Mon, 13 Dec 2010 12:15:45 GMT]]></title><description><![CDATA[<p>Jockelx schrieb:</p>
<blockquote>
<p>@Shade Of Mine: Scherzkeks. Das die non-const-Version das Objekt momentan nicht ändert ist klar.<br />
Aber wenn ich 3 Monate später denke, dass das gut wäre, dann hätte ich gerne 'nen Kompilerfehler, wenn die const-Variante dadurch dann auch das Objekt ändert.</p>
</blockquote>
<p>Viel schlimmer. Du hast dann einen Logikfehler. Denn wenn die non-const Variante das Objekt ändert - was soll dann die const Variante machen??</p>
<p>Damit sind die Beiden nicht mehr symmetrisch. Böse böse Sache.</p>
<p>Sowas ist mir deshalb auch noch nie untergekommen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1993686</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1993686</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Mon, 13 Dec 2010 12:15:45 GMT</pubDate></item><item><title><![CDATA[Reply to const- und nicht-const-Variante einer Methode basteln on Mon, 13 Dec 2010 14:22:40 GMT]]></title><description><![CDATA[<p>Was?<br />
Irgendwie reden wir wohl aneinander vorbei...</p>
<p>Nochmal:<br />
Ich hab eine const-Funktion und eine nicht-const-Funktion, die (zur Zeit) beide das selbe machen.<br />
Um Codeverdopplung zu reduzieren, ruft die eine die andere auf.<br />
Und sinnvoll ist nur, dass die non-const die const aufruft.<br />
Ich gebe hier stumpf Meyers ersten Tipp wieder und hab gerade das Gefühl, das es dir nur darum geht kontra zu geben.</p>
<p>Edit: Bzw. hab ich jetzt nichts gelesen, warum es anders herum vorteilhafter wäre.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1993783</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1993783</guid><dc:creator><![CDATA[Jockelx]]></dc:creator><pubDate>Mon, 13 Dec 2010 14:22:40 GMT</pubDate></item><item><title><![CDATA[Reply to const- und nicht-const-Variante einer Methode basteln on Mon, 13 Dec 2010 20:34:01 GMT]]></title><description><![CDATA[<p>Jockelx schrieb:</p>
<blockquote>
<p>Irgendwie reden wir wohl aneinander vorbei...</p>
</blockquote>
<p>Jep tun wir.<br />
Mein Fehler. Wir meinen eh prinzipiell das gleiche, ich hab dich nur falsch verstanden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1994056</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1994056</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Mon, 13 Dec 2010 20:34:01 GMT</pubDate></item><item><title><![CDATA[Reply to const- und nicht-const-Variante einer Methode basteln on Tue, 04 Jan 2011 17:42:39 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>Nur um das kurz zu klären. Es ist korrekt, dass der non-const-getter nichts ändert, sondern nur eine non-const Referenz zurückgeben soll.</p>
<p>Dann nutze ich einfach ne konstante this-Referenz, danke. <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>Viele Grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2002367</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2002367</guid><dc:creator><![CDATA[Eisflamme]]></dc:creator><pubDate>Tue, 04 Jan 2011 17:42:39 GMT</pubDate></item><item><title><![CDATA[Reply to const- und nicht-const-Variante einer Methode basteln on Mon, 10 Jan 2011 20:34:19 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>jetzt bin ich wieder etwas blöd. Wenn ich das hier in die const-Methode stecke:</p>
<pre><code class="language-cpp">onst* element = static_cast&lt;T const*&gt;(this)-&gt;getElement();
</code></pre>
<p>hab ich doch eine Endlosrekursion. Da bleibt das Programm nämlich gerade stecken.</p>
<p>Syntaktisch funktionieren tut aber das:</p>
<pre><code class="language-cpp">const ModelNode* ModelNode::FindNode( const std::string&amp; nodeName ) const
	{
		return const_cast&lt;ModelNode*&gt;(this)-&gt;FindNode(nodeName);
	}
</code></pre>
<p>Sollte tun, oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2005100</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2005100</guid><dc:creator><![CDATA[Eisflamme]]></dc:creator><pubDate>Mon, 10 Jan 2011 20:34:19 GMT</pubDate></item><item><title><![CDATA[Reply to const- und nicht-const-Variante einer Methode basteln on Mon, 10 Jan 2011 20:54:36 GMT]]></title><description><![CDATA[<p>Das ist Käse, Eisflamme. Siehe Antwort von 1729 auf der ersten Seite.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2005110</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2005110</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Mon, 10 Jan 2011 20:54:36 GMT</pubDate></item></channel></rss>