<?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[Probleme mit Strings]]></title><description><![CDATA[<p>Servus,</p>
<p>mich würde mal interessieren, wie ihr unter C++ mit Strings umgeht. Ich hab da leider noch so meine Probleme damit, vor allem weil ich halt Strings aus anderen Sprachen gewohnt bin (Java, verschiedene Basic-Dialekte, Python, etc).</p>
<p>Ich weiß zum Beispiel nie, in welcher Form ich Strings am besten übergeben und zurückgeben soll. Gibt es dafür &quot;Richtlinien&quot;, die in den meisten Fällen die beste Möglichkeit darstellen, oder kann man da pauschal nichts sagen?</p>
<p>Ich sehe zum Beispiel oft, daß Strings als <strong>const std::string&amp;</strong> übergeben werden. Allerdings hatte ich gestern z.B. den Fall, daß ich einen String gerne als Index in einer Map benutzen will, und da kann ich mit der obigen Version leider nichts anfangen und habe den String komplett übergeben (weder mit * noch mit &amp;). Als Rückgabewert war es für mich meist auch am praktischsten, einfach einen kompletten String zurückzugeben statt eines Pointers.</p>
<p>Überhaupt besteht ja bei einem Pointer immer das Problem, daß sich der String irgendwo anders ändern könnte, und man dann nur den Pointer auf den geänderten String hat. Aber in den meisten Fällen will man ja den fertigen String für sich behalten (siehe auch Java, da ist ja jeder String final).</p>
<p>Ist es daher praktikabel, einfach immer das komplette Objekt zu übergeben, oder sollte man doch eher mit Referenzen und Pointern arbeiten? Gibt's hierüber vielleicht auch irgendwo einen guten, verständlichen Artikel?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/214630/probleme-mit-strings</link><generator>RSS for Node</generator><lastBuildDate>Tue, 13 Oct 2026 09:24:05 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/214630.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 01 Jun 2008 10:00:36 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Probleme mit Strings on Sun, 01 Jun 2008 10:00:36 GMT]]></title><description><![CDATA[<p>Servus,</p>
<p>mich würde mal interessieren, wie ihr unter C++ mit Strings umgeht. Ich hab da leider noch so meine Probleme damit, vor allem weil ich halt Strings aus anderen Sprachen gewohnt bin (Java, verschiedene Basic-Dialekte, Python, etc).</p>
<p>Ich weiß zum Beispiel nie, in welcher Form ich Strings am besten übergeben und zurückgeben soll. Gibt es dafür &quot;Richtlinien&quot;, die in den meisten Fällen die beste Möglichkeit darstellen, oder kann man da pauschal nichts sagen?</p>
<p>Ich sehe zum Beispiel oft, daß Strings als <strong>const std::string&amp;</strong> übergeben werden. Allerdings hatte ich gestern z.B. den Fall, daß ich einen String gerne als Index in einer Map benutzen will, und da kann ich mit der obigen Version leider nichts anfangen und habe den String komplett übergeben (weder mit * noch mit &amp;). Als Rückgabewert war es für mich meist auch am praktischsten, einfach einen kompletten String zurückzugeben statt eines Pointers.</p>
<p>Überhaupt besteht ja bei einem Pointer immer das Problem, daß sich der String irgendwo anders ändern könnte, und man dann nur den Pointer auf den geänderten String hat. Aber in den meisten Fällen will man ja den fertigen String für sich behalten (siehe auch Java, da ist ja jeder String final).</p>
<p>Ist es daher praktikabel, einfach immer das komplette Objekt zu übergeben, oder sollte man doch eher mit Referenzen und Pointern arbeiten? Gibt's hierüber vielleicht auch irgendwo einen guten, verständlichen Artikel?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1520470</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1520470</guid><dc:creator><![CDATA[Rock Lobster]]></dc:creator><pubDate>Sun, 01 Jun 2008 10:00:36 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit Strings on Sun, 01 Jun 2008 10:19:45 GMT]]></title><description><![CDATA[<p>Das ist kein string-spezifisches Problem.<br />
Generell kann man sagen:<br />
Objekte sollten per const-Referenz (Object const&amp; obj) an Funktionen uebergeben werden.<br />
Das gilt nur, wenn das Objekt nicht veraendert werden soll (dann non-const Referenz).<br />
Das wiederrum gilt nur, wenn IMMER ein gueltiges Objekt verlangt wird, ist das nicht der Fall, nimmt man Zeiger (weil dieser 0 sein kann).</p>
<p>Built-ins kann man immer per Value uebergeben (allerdings auch mit den Ausnahmen von oben, wenn Veraenderung gewuenscht ist).</p>
<p>Die Rueckgabe von Objekten sollte generell auch per const-Referenz erfolgen. Das ist allerdings nur praktikabel, wenn es sich nicht um lokal-erstellte Objekte handelt (weil diese wie der Name schon sagt nur lokal gueltig sind). Das wuerde etwa bei gettern zu Member-Variablen zutreffen.</p>
<p>Hast du ein lokales Objekt und moechtest es zurueckgeben, so mach es per value (&quot;ohne alles&quot;, Object object). Das Objekt wird dabei kopiert, die Kopie ist aber eben auch nach Rueckkehr der Funktion gueltig.</p>
<p>Im Detail gibt es sicherlich Ausnahmen, oder ich habe Faelle vergessen, aber so grundlegend kann man das so sagen, denke ich.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1520478</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1520478</guid><dc:creator><![CDATA[DeSoVoDaMu]]></dc:creator><pubDate>Sun, 01 Jun 2008 10:19:45 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit Strings on Sun, 01 Jun 2008 10:52:42 GMT]]></title><description><![CDATA[<p>Rock Lobster schrieb:</p>
<blockquote>
<p>Ich sehe zum Beispiel oft, daß Strings als <strong>const std::string&amp;</strong> übergeben werden. Allerdings hatte ich gestern z.B. den Fall, daß ich einen String gerne als Index in einer Map benutzen will, und da kann ich mit der obigen Version leider nichts anfangen und habe den String komplett übergeben (weder mit * noch mit &amp;). Als Rückgabewert war es für mich meist auch am praktischsten, einfach einen kompletten String zurückzugeben statt eines Pointers.</p>
</blockquote>
<p>Warum kannst du den const std::string nicht als index in eine std::map&lt;std::string, T&gt; verwenden? funktioniert bei mir problemlos ... Fehlermeldung?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1520493</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1520493</guid><dc:creator><![CDATA[darthdespotism]]></dc:creator><pubDate>Sun, 01 Jun 2008 10:52:42 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit Strings on Sun, 01 Jun 2008 11:51:13 GMT]]></title><description><![CDATA[<p>Okay das sind schonmal ein paar gute Ansätze. Ich denke ich werd mir meine Klasse nochmal genau anschauen und dann entscheiden, wie ich was mache. Ich dachte nur bisher irgendwie immer, daß es blöd ist, komplette Objekte per value zu übergeben, gerade weil eben eine Kopie gemacht wird, aber gerade bei Strings ist eine Kopie ja oft erwünscht.</p>
<p>Wobei ein std::string-Objekt doch sicherlich intern einen Pointer auf ein Char-Array besitzt, oder? Wenn ich nun einen std::string zurückgebe (also nicht nur die Referenz), wird dann tatsächlich auch der innen verlinkte String mitkopiert (also Deep Copy)?</p>
<p>@ darthdespotism: Doch, das geht schon, da habe ich mich vielleicht falsch ausgedrückt. Ich kann eine std::map&lt;std::string, T&gt; machen, aber wenn ich diese über eine Methode befülle, dann kann ich dieser Methode natürlich kein const std::string**&amp;** übergeben, sondern da muß dann schon ein &quot;richtiger&quot; String her. Alternativ könnte man sicherlich auch std::string***** verwenden, aber dann müßte die Map als Index soweit ich weiß auch std::string* verwenden, und ich bin mir nicht sicher, ob das eine gute Methode ist (denn dann wäre ja die Adresse der Index und nicht der String selbst).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1520515</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1520515</guid><dc:creator><![CDATA[Rock Lobster]]></dc:creator><pubDate>Sun, 01 Jun 2008 11:51:13 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit Strings on Sun, 01 Jun 2008 12:27:16 GMT]]></title><description><![CDATA[<p>Rock Lobster schrieb:</p>
<blockquote>
<p>@ darthdespotism: Doch, das geht schon, da habe ich mich vielleicht falsch ausgedrückt. Ich kann eine std::map&lt;std::string, T&gt; machen, aber wenn ich diese über eine Methode befülle, dann kann ich dieser Methode natürlich kein const std::string**&amp;** übergeben, sondern da muß dann schon ein &quot;richtiger&quot; String her. [...]</p>
</blockquote>
<p>Wieso das?<br />
Eine const Referenz auf string sollte problemlos gehen:</p>
<pre><code class="language-cpp">std::map&lt;std::string, int&gt; map;
//...
void fill(const std::string&amp; key, int value)
{
    map[key] = value;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1520528</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1520528</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Sun, 01 Jun 2008 12:27:16 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit Strings on Sun, 01 Jun 2008 15:36:07 GMT]]></title><description><![CDATA[<p>Stimmt, hab's grad geändert und es compiliert. Hatte da wohl was verwechselt.</p>
<p>Aber da gibt's ein anderes Problem, ich kann z.B. nicht fill(&quot;Servus&quot;, 123); aufrufen, sondern muß dann vorher den String erst erstellen und anschließend die Referenz übergeben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1520623</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1520623</guid><dc:creator><![CDATA[Rock Lobster]]></dc:creator><pubDate>Sun, 01 Jun 2008 15:36:07 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit Strings on Sun, 01 Jun 2008 17:33:07 GMT]]></title><description><![CDATA[<p>Rock Lobster schrieb:</p>
<blockquote>
<p>Stimmt, hab's grad geändert und es compiliert. Hatte da wohl was verwechselt.</p>
<p>Aber da gibt's ein anderes Problem, ich kann z.B. nicht fill(&quot;Servus&quot;, 123); aufrufen, sondern muß dann vorher den String erst erstellen und anschließend die Referenz übergeben.</p>
</blockquote>
<pre><code class="language-cpp">#include &lt;map&gt;
#include &lt;string&gt;

std::map&lt;std::string, int&gt; map; 
//... 
void fill(const std::string&amp; key, int value) 
{ 
    map[key] = value; 
}

int main()
{
	fill(&quot;Hallo&quot;, 1223);
}
</code></pre>
<p>Kompiliert und funktioniert bei mir</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1520683</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1520683</guid><dc:creator><![CDATA[darthdespotism]]></dc:creator><pubDate>Sun, 01 Jun 2008 17:33:07 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit Strings on Sun, 01 Jun 2008 17:57:25 GMT]]></title><description><![CDATA[<p>Oh stimmt, hatte das const vergessen <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="🙂"
    /> vielen Dank für den Hinweis, jetzt geht's bei mir auch</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1520694</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1520694</guid><dc:creator><![CDATA[Rock Lobster]]></dc:creator><pubDate>Sun, 01 Jun 2008 17:57:25 GMT</pubDate></item></channel></rss>