<?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 Referenz als Rückgabewert --&amp;gt; Verwirrung]]></title><description><![CDATA[<p>Hallo,<br />
ich beschäftige mich gerade mit Referenzen. Wenn ich nun eine Funktion erstelle, die mir eine const Referenz zurückgibt, dann frage ich mich, wo sich dieses const bemerkbar macht oder anders gesagt: Wo liegt der Unterschied, wenn ich das const weglasse.</p>
<p>Wenn ich beispielsweise const string&amp; zurückgebe und einem String den Rückgabewert zuweise, dann kann ich diesen ja trotzdem ändern?!</p>
<p>Könnt ihr mir helfen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
<p>lg, freakC++</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/252263/const-referenz-als-rückgabewert-gt-verwirrung</link><generator>RSS for Node</generator><lastBuildDate>Tue, 15 Sep 2026 02:20:39 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/252263.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 17 Oct 2009 08:03:23 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to const Referenz als Rückgabewert --&amp;gt; Verwirrung on Sat, 17 Oct 2009 08:03:23 GMT]]></title><description><![CDATA[<p>Hallo,<br />
ich beschäftige mich gerade mit Referenzen. Wenn ich nun eine Funktion erstelle, die mir eine const Referenz zurückgibt, dann frage ich mich, wo sich dieses const bemerkbar macht oder anders gesagt: Wo liegt der Unterschied, wenn ich das const weglasse.</p>
<p>Wenn ich beispielsweise const string&amp; zurückgebe und einem String den Rückgabewert zuweise, dann kann ich diesen ja trotzdem ändern?!</p>
<p>Könnt ihr mir helfen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
<p>lg, freakC++</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1793683</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1793683</guid><dc:creator><![CDATA[freakC++]]></dc:creator><pubDate>Sat, 17 Oct 2009 08:03:23 GMT</pubDate></item><item><title><![CDATA[Reply to const Referenz als Rückgabewert --&amp;gt; Verwirrung on Sat, 17 Oct 2009 08:29:08 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">std::string str = obj.getString()  # str wird per Kopierkonstruktor mit dem ret-val erstellt
std::string&amp; strRef = obj.getString()
</code></pre>
<p>Letzteres gibt einen Fehler, wenn getString() einen const-ref zurück gibt. bei einem non-const-ref verweist strRef direkt auf nen private member deiner Klasse, und ist böse, weil keine Kapselung mehr. Du könntest sonst auch den Member gleich public deklarieren.<br />
Also wenn Referenz zurückgeben, dann const.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1793689</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1793689</guid><dc:creator><![CDATA[reterer]]></dc:creator><pubDate>Sat, 17 Oct 2009 08:29:08 GMT</pubDate></item><item><title><![CDATA[Reply to const Referenz als Rückgabewert --&amp;gt; Verwirrung on Sat, 17 Oct 2009 09:19:33 GMT]]></title><description><![CDATA[<p>freakC++ schrieb:</p>
<blockquote>
<p>ich beschäftige mich gerade mit Referenzen. Wenn ich nun eine Funktion erstelle, die mir eine const Referenz zurückgibt,</p>
</blockquote>
<p>Zeig mal ein Beispiel.</p>
<p>freakC++ schrieb:</p>
<blockquote>
<p>dann frage ich mich, wo sich dieses const bemerkbar macht oder anders gesagt: Wo liegt der Unterschied, wenn ich das const weglasse.</p>
</blockquote>
<p>Wenn Du das const weglässt, kann man das string-Objekt über die Referenz ohne einen <code>const_cast</code> logisch verändern.</p>
<p>freakC++ schrieb:</p>
<blockquote>
<p>Wenn ich beispielsweise const string&amp; zurückgebe und einem String den Rückgabewert zuweise, dann kann ich diesen ja trotzdem ändern?!</p>
</blockquote>
<p>Klar. Warum nicht?</p>
<p>Welches C++ Buch benutzt Du, was const und Referenzen nicht richtig erklärt?</p>
<p>Gruß,<br />
SP</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1793704</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1793704</guid><dc:creator><![CDATA[Sebastian Pizer]]></dc:creator><pubDate>Sat, 17 Oct 2009 09:19:33 GMT</pubDate></item><item><title><![CDATA[Reply to const Referenz als Rückgabewert --&amp;gt; Verwirrung on Sat, 17 Oct 2009 12:20:28 GMT]]></title><description><![CDATA[<p>Hallo,<br />
hier kommt ein Beispiel:</p>
<pre><code class="language-cpp">const string&amp; strToUpper(const string&amp; s1)
{
	static string s2 = &quot;&quot;;
	for (int i = 0; i &lt; s1.length(); ++i)
		s2 += toupper(s1[i]);
	return s2;
}
</code></pre>
<p>Diese Funktion stellt einen String in Großbuchstaben dar. Nun kann man genauso gut das const verglassen. Da ich &quot;const_cast&quot; noch nicht kenne, verstehe ich nicht, welchen Sinn const als Rückgabewert hat.<br />
1.) Was kann hier nicht verändert werden?</p>
<p>Wenn ich als Parameter einen String direkt übergebe (also z.B. so: &quot;Hallo&quot;) und diese als Referenz haben möchte, dann muss ich diese als const deklarieren, da man ja &quot;Hallo&quot; über die Referenz ändern könnte, doch &quot;Hallo&quot; ist ja schon was konstantes.<br />
2.) Liege ich da richtig?</p>
<p>Vielen Dank<br />
lg, freakC++</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1793785</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1793785</guid><dc:creator><![CDATA[freakC++]]></dc:creator><pubDate>Sat, 17 Oct 2009 12:20:28 GMT</pubDate></item><item><title><![CDATA[Reply to const Referenz als Rückgabewert --&amp;gt; Verwirrung on Sat, 17 Oct 2009 12:32:48 GMT]]></title><description><![CDATA[<p>freakC++ schrieb:</p>
<blockquote>
<p>Hallo,<br />
hier kommt ein Beispiel:</p>
<pre><code class="language-cpp">const string&amp; strToUpper(const string&amp; s1)
{
	static string s2 = &quot;&quot;;
	for (int i = 0; i &lt; s1.length(); ++i)
		s2 += toupper(s1[i]);
	return s2;
}
</code></pre>
<p>Diese Funktion stellt einen String in Großbuchstaben dar. Nun kann man genauso gut das const verglassen. Da ich &quot;const_cast&quot; noch nicht kenne, verstehe ich nicht, welchen Sinn const als Rückgabewert hat.<br />
1.) Was kann hier nicht verändert werden?</p>
</blockquote>
<p>Der Rückgabewert.<br />
Beispiel:</p>
<pre><code class="language-cpp">string benutzername=foo::bar.theConnection().createLockingHandle()-&gt;readUserName();
if(strToUpper(username)=&quot;Adolf Hitler&quot;)
   throw PoliticalCorrectnessException();
cout&lt;&lt;&quot;neuer user: &quot;&lt;&lt;benutzername&lt;&lt;'\n';
registerUser(benutzername);
</code></pre>
<p>Du siehst natürlich sofort den Fehler, und warum das const aus der Warning einen leckeren Compilerfehler macht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1793798</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1793798</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Sat, 17 Oct 2009 12:32:48 GMT</pubDate></item><item><title><![CDATA[Reply to const Referenz als Rückgabewert --&amp;gt; Verwirrung on Sat, 17 Oct 2009 12:35:42 GMT]]></title><description><![CDATA[<p>freakC++ schrieb:</p>
<blockquote>
<p>1.) Was kann hier nicht verändert werden?</p>
</blockquote>
<p><code>s2</code> kann nicht von außen verändert werden, weil du eine const-Referenz darauf zurückgibst. Weist du den Rückgabewert einem anderen String zu, wird s2 kopiert.</p>
<blockquote>
<p>2.) Liege ich da richtig?</p>
</blockquote>
<p>Wenn es ein <code>std::string</code> ist, dann nein. Wenn du ein String-Literal übergibst, wird ein <code>std::string</code> -Objekt automatisch erzeugt, weil <code>std::string</code> einen passenden Konstruktor hat. Dieses Objekt ist nur lokal gültig, das Literal wird nicht angefasst.</p>
<p>Deine Funktion ist übrigens buggy, weil du <code>s2</code> niemals leerst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1793799</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1793799</guid><dc:creator><![CDATA[Registrierter Troll]]></dc:creator><pubDate>Sat, 17 Oct 2009 12:35:42 GMT</pubDate></item><item><title><![CDATA[Reply to const Referenz als Rückgabewert --&amp;gt; Verwirrung on Sat, 17 Oct 2009 12:49:13 GMT]]></title><description><![CDATA[<p>Registrierter Troll schrieb:</p>
<blockquote>
<p>Deine Funktion ist übrigens buggy, weil du <code>s2</code> niemals leerst.</p>
</blockquote>
<p>Die Funktion kommt mir sowieso vor, als würde man mit <code>static</code> und Const-Referenz-Rückgabe versuchen, Rechenzeit zu sparen. Mit RVO ist das in vielen Fällen nicht mehr nötig, dann macht man es lieber auf die intuitive Art (in der Funktion neuen String erstellen und Kopie zurückgeben).</p>
<p>Alternativ kann man auch eine In-Place-Funktion <code>void ToUpper(std::string&amp; Str);</code> schreiben, in der man gleich auf dem übergebenen Objekt arbeitet. Dann kann man die obere Kopierfunktion mittels dieser implementieren - analog zur üblichen Definition von <code>operator+=</code> und <code>operator+</code> .</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1793805</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1793805</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sat, 17 Oct 2009 12:49:13 GMT</pubDate></item><item><title><![CDATA[Reply to const Referenz als Rückgabewert --&amp;gt; Verwirrung on Sat, 17 Oct 2009 12:49:27 GMT]]></title><description><![CDATA[<p>Angenommen ich deklariere den Rückgabewert nicht als const...kann mir jemand mal ein Beispiel zeigen, wie ich dann s2 von außerhalb ändern kann?</p>
<p>Vielen Dank für die anderen Beispiele.<br />
lg, freakC++</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1793806</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1793806</guid><dc:creator><![CDATA[freakC++]]></dc:creator><pubDate>Sat, 17 Oct 2009 12:49:27 GMT</pubDate></item><item><title><![CDATA[Reply to const Referenz als Rückgabewert --&amp;gt; Verwirrung on Sat, 17 Oct 2009 12:51:02 GMT]]></title><description><![CDATA[<p>freakC++ schrieb:</p>
<blockquote>
<p>Angenommen ich deklariere den Rückgabewert nicht als const...kann mir jemand mal ein Beispiel zeigen, wie ich dann s2 von außerhalb ändern kann?</p>
</blockquote>
<p>Wie wärs, wenn du mal selbst etwas ausprobierst, statt jedes kleine Detail nachzufragen?</p>
<pre><code class="language-cpp">std::string s;
strToUpper(s) = &quot;nein!&quot;;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1793809</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1793809</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sat, 17 Oct 2009 12:51:02 GMT</pubDate></item><item><title><![CDATA[Reply to const Referenz als Rückgabewert --&amp;gt; Verwirrung on Sat, 17 Oct 2009 12:55:18 GMT]]></title><description><![CDATA[<p>freakC++ schrieb:</p>
<blockquote>
<p>Angenommen ich deklariere den Rückgabewert nicht als const...kann mir jemand mal ein Beispiel zeigen, wie ich dann s2 von außerhalb ändern kann?</p>
</blockquote>
<p>Habe ich schon gemacht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1793812</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1793812</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Sat, 17 Oct 2009 12:55:18 GMT</pubDate></item><item><title><![CDATA[Reply to const Referenz als Rückgabewert --&amp;gt; Verwirrung on Sat, 17 Oct 2009 13:02:31 GMT]]></title><description><![CDATA[<p>Ahh..natürlich! Danke! Vielen Dank!</p>
<p>lg, freakC++</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1793815</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1793815</guid><dc:creator><![CDATA[freakC++]]></dc:creator><pubDate>Sat, 17 Oct 2009 13:02:31 GMT</pubDate></item></channel></rss>