<?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[CString oder string?]]></title><description><![CDATA[<p>Welche Klasse haltet ihr für die beste? Welche sollte man wann verwenden?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/82981/cstring-oder-string</link><generator>RSS for Node</generator><lastBuildDate>Mon, 13 Apr 2026 22:28:44 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/82981.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 16 Aug 2004 16:52:04 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to CString oder string? on Mon, 16 Aug 2004 16:52:04 GMT]]></title><description><![CDATA[<p>Welche Klasse haltet ihr für die beste? Welche sollte man wann verwenden?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/583928</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/583928</guid><dc:creator><![CDATA[graf_double]]></dc:creator><pubDate>Mon, 16 Aug 2004 16:52:04 GMT</pubDate></item><item><title><![CDATA[Reply to CString oder string? on Mon, 16 Aug 2004 17:06:32 GMT]]></title><description><![CDATA[<p>graf_double schrieb:</p>
<blockquote>
<p>Welche Klasse haltet ihr für die beste? Welche sollte man wann verwenden?</p>
</blockquote>
<p>Hallo Du,</p>
<p>kommt drauf an für was der String/CString sein soll? Müsstest das Problem schon mal etwas detaillierter darstellen.....</p>
]]></description><link>https://www.c-plusplus.net/forum/post/583952</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/583952</guid><dc:creator><![CDATA[AndyDD]]></dc:creator><pubDate>Mon, 16 Aug 2004 17:06:32 GMT</pubDate></item><item><title><![CDATA[Reply to CString oder string? on Mon, 16 Aug 2004 17:44:45 GMT]]></title><description><![CDATA[<p>Naja ein Problem besteht zur Zeit nicht - Ich programmiere eine MFC Datenbankanwendung. Da benutze ich viele CString Instanzen für die querys. Ich finde das sehr bequem. Aber ich frage mich, ob da nicht ein Haken ist... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/583984</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/583984</guid><dc:creator><![CDATA[graf_double]]></dc:creator><pubDate>Mon, 16 Aug 2004 17:44:45 GMT</pubDate></item><item><title><![CDATA[Reply to CString oder string? on Mon, 16 Aug 2004 18:05:00 GMT]]></title><description><![CDATA[<p>Die Standard-Meute wird dir sicherlich std::string ans Herz legen und hat ihre guten Gründe. Und wenn Portabilitäöt dein Hauptanliegen ist, haben sie auf jeden Fall recht. <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>
<p>Aber... Vorteile von CString:<br />
- es gibt genügend portable Implementationen außerhalb der MFC<br />
- stärkere Performance-Garantien als std::string<br />
- Bessere Interop mit anderen Bibliotheken / C-API's etc.</p>
<p>Nachteile:<br />
- Templatisierung über char-typ erst ab VC7<br />
- Der &quot;böse Trick&quot; für vararg-Argumente. Das betrifft aber nicht die CString-Klasse selbst, sondern &quot;nur&quot; gängigen Client-Code</p>
<p>CString ist referenzgezählt. Damit kann man guten Gewissens CString als Rückgabewert einsetzen. Mit GetBuffer/ReleaseBuffer machen Interop einfacher.</p>
<p>std::string kann referenzgezählt sein, muß aber nicht <sup>1)</sup> std::string kann als NULL-terminierte Zeichenkette implementiert sein, muß aber nicht. Für interop kommt man mit std::vector&lt;char&gt; deutlich besser als mit std::string</p>
<p>^1) referenzgezählt ist nicht immer besser - aber wenn man es nicht weiß, ist man bei performancekritischen Schnittstellen ziemlich eingeschränkt^</p>
]]></description><link>https://www.c-plusplus.net/forum/post/584003</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/584003</guid><dc:creator><![CDATA[peterchen]]></dc:creator><pubDate>Mon, 16 Aug 2004 18:05:00 GMT</pubDate></item><item><title><![CDATA[Reply to CString oder string? on Mon, 16 Aug 2004 19:35:52 GMT]]></title><description><![CDATA[<p>ok - danke, das hat mir geholfen - ich denke, dass ich bei meinem aktuellen programm weiterhin CString benutzen werde, da ich das Programm auschließlich für Windows(XP) entwickle...</p>
<p>das mit dem referenzgezählt habe ich allerdings nicht so ganz verstanden, was versteht man darunter?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/584105</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/584105</guid><dc:creator><![CDATA[graf_double]]></dc:creator><pubDate>Mon, 16 Aug 2004 19:35:52 GMT</pubDate></item><item><title><![CDATA[Reply to CString oder string? on Mon, 16 Aug 2004 23:34:01 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">CString a = &quot;Hello&quot;;  
// hier wird Speicher alloziert und der initialisierungsstring kopiert

CString b = a; 
// hier wird *keine* Kopie angefertigt! nur ein Referenzzähler hochgezählt. 
// b und a verwenden das gleiche interne CStringData - Objekt

b+=&quot; World&quot;; 
// erst jetzt wird eine Kopie von des ursprüngliche Strings erstellt,
// da b verändert wird. a behält den Ursprünglichen Wert, an b wird angehängt
</code></pre>
<p>Nach außen verhält sich der String &quot;wie erwartet&quot;, intern wird aber das kopieren (was oftmals gar nicht nötig ist) geschieht erst wenn der String selbst wirklich verändert wird. Das hilft ungemein, &quot;bequeme&quot; Interfaces zu schaffen, ohne Effektivität zu verlieren.</p>
<p>Häufigster Fall: Wird ein CString als (By-Value-)Funktionsparameter oder als Return-Wert übergeben, wird keine Kopie erzeugt.</p>
<p>Beispiel:</p>
<pre><code class="language-cpp">CString CFoo::GetItemText() { return m_itemText; }
void CBar::SetName(CString s, bool appendSpace = false) 
{ 
  if (appendSpace) s += ' ';
  ...// was auch immer mit s geschehen soll
}

// ohne eine einzige Kopie:
bar.SetName(foo.GetItemText());
</code></pre>
<p>Referenzgezählte Objekte können in Multithreaded-Programmen allerdings bremsen, wenn die Referenzzähler häufig aus verschiedenen Threads rauf- und runtergezäht werden, und jedesmal ein Thread auf den anderen warten muß. Aber wenn man das weiß, kann man sein Programm halt dementsprechend anpassen...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/584249</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/584249</guid><dc:creator><![CDATA[peterchen]]></dc:creator><pubDate>Mon, 16 Aug 2004 23:34:01 GMT</pubDate></item><item><title><![CDATA[Reply to CString oder string? on Tue, 17 Aug 2004 00:38:58 GMT]]></title><description><![CDATA[<p>generell würd ich sagen wenn du für nur ein system entwickelst benutz die systemeigenen tools weil sie in die umgebung passen</p>
<p>d.h. du musst weniger schreiben wenn du cstring in einer ms umgebung benutzt</p>
<p>sobald du auf mehreren systemen arbeitest brauchst du zwingend den stl string, oder char pointer bzw. eine eigene klasse die den char pointer nach ansi standard kapselt (der stl string is auf vielen embedded systemen nich vorhanden)</p>
<p>bei den mainstream systemen (win mac linux) is der stl string die beste wahl</p>
]]></description><link>https://www.c-plusplus.net/forum/post/584261</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/584261</guid><dc:creator><![CDATA[Sovok]]></dc:creator><pubDate>Tue, 17 Aug 2004 00:38:58 GMT</pubDate></item><item><title><![CDATA[Reply to CString oder string? on Tue, 17 Aug 2004 02:52:53 GMT]]></title><description><![CDATA[<p>CString wurde zu einer Zeit entwickelt, als es die C++-Klasse string noch nicht im Standard gab. Prinzipiell sollte man immer std::string verwenden, da es alle notwendigen Funktionen bereit hält.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/584272</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/584272</guid><dc:creator><![CDATA[Erhard Henkes]]></dc:creator><pubDate>Tue, 17 Aug 2004 02:52:53 GMT</pubDate></item><item><title><![CDATA[Reply to CString oder string? on Tue, 17 Aug 2004 05:28:47 GMT]]></title><description><![CDATA[<p>Erhard Henkes schrieb:</p>
<blockquote>
<p>CString wurde zu einer Zeit entwickelt, als es die C++-Klasse string noch nicht im Standard gab. Prinzipiell sollte man immer std::string verwenden, da es alle notwendigen Funktionen bereit hält.</p>
</blockquote>
<p>Kann man nicht so verallgemeinern. Wenn ein Programm schon &quot;MFC-verseucht&quot; ist dann sehe ich keinen Grund nicht CString zu benutzen. Die STL-Stringklasse finde ich nicht sonderlich gelungen. Man muss sich zuviele Sachen drum herum basteln (z.B. trim, replace etc.). CString gefällt mir von der &quot;Bedienung&quot; her schon besser. Bei neu gestarteten Projekten und wiederverwendbaren Klassen würde ich aber auch eher zum std::string tendieren und sie komplett MFC-frei halten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/584284</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/584284</guid><dc:creator><![CDATA[Walli]]></dc:creator><pubDate>Tue, 17 Aug 2004 05:28:47 GMT</pubDate></item><item><title><![CDATA[Reply to CString oder string? on Tue, 17 Aug 2004 06:25:49 GMT]]></title><description><![CDATA[<blockquote>
<p>komplett MFC-frei halten</p>
</blockquote>
<p>Ich will dich ja nicht in die totalte Dunkelheit führen, Mastah, aber CString gibt es auch ohne MFC <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f576.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--sunglasses"
      title=":sunglasses:"
      alt="🕶"
    /></p>
<p>(Wenn ich sehe, wie oft MFC-Unterstützung zu einem ATL- oder Consolen-Perojekt dazugefügt wird - und warum? &quot;Na, wegen CString&quot;....)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/584305</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/584305</guid><dc:creator><![CDATA[peterchen]]></dc:creator><pubDate>Tue, 17 Aug 2004 06:25:49 GMT</pubDate></item><item><title><![CDATA[Reply to CString oder string? on Tue, 17 Aug 2004 09:17:15 GMT]]></title><description><![CDATA[<p>Habt ihr schnmal versucht einen std::string in einer DLL, welche eine ganze Klasse exportiert zu verwenden.<br />
Ich hab es ohne Probleme nicht geschafft.</p>
<p>Wenn man MFC verwendet kann man auch CString verwenden. MS hat diese Klasse optimiert.<br />
Will man auch andere Plattformen dann hat man hier sowieso nichts verloren da MFC nicht verwendung finden kann.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/584411</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/584411</guid><dc:creator><![CDATA[Unix-Tom]]></dc:creator><pubDate>Tue, 17 Aug 2004 09:17:15 GMT</pubDate></item><item><title><![CDATA[Reply to CString oder string? on Tue, 17 Aug 2004 09:25:56 GMT]]></title><description><![CDATA[<p>Ich habe noch eine Frage, und zwar ist das erlaubt, bzw. in ordnung:</p>
<pre><code class="language-cpp">CString str = &quot;Hallo!&quot;;

//irgendwas mit dem string machen, z.b. MessageBox(str)...

str = &quot;Welt&quot;;

//Wieder irgendwas machen.
</code></pre>
<p>Darf man so immer wieder den Text ändern?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/584420</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/584420</guid><dc:creator><![CDATA[graf_double]]></dc:creator><pubDate>Tue, 17 Aug 2004 09:25:56 GMT</pubDate></item><item><title><![CDATA[Reply to CString oder string? on Tue, 17 Aug 2004 11:10:24 GMT]]></title><description><![CDATA[<p>graf_double schrieb:</p>
<blockquote>
<p>Ich habe noch eine Frage, und zwar ist das erlaubt, bzw. in ordnung:</p>
<pre><code class="language-cpp">CString str = &quot;Hallo!&quot;;

//irgendwas mit dem string machen, z.b. MessageBox(str)...

str = &quot;Welt&quot;;

//Wieder irgendwas machen.
</code></pre>
<p>Darf man so immer wieder den Text ändern?</p>
</blockquote>
<p>natürlich.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/584511</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/584511</guid><dc:creator><![CDATA[ppc]]></dc:creator><pubDate>Tue, 17 Aug 2004 11:10:24 GMT</pubDate></item><item><title><![CDATA[Reply to CString oder string? on Tue, 17 Aug 2004 11:30:31 GMT]]></title><description><![CDATA[<blockquote>
<p>Will man auch andere Plattformen dann hat man hier sowieso nichts verloren da MFC nicht verwendung finden kann.</p>
</blockquote>
<p>Ha!</p>
<p><a href="http://www.codeproject.com/string/stdstring.asp" rel="nofollow">CString implementation based on basic_string</a></p>
<p><a href="http://www.google.de/search?hl=de&amp;q=CString+clone" rel="nofollow">Google:CString clone</a></p>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f576.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--sunglasses"
      title=":sunglasses:"
      alt="🕶"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/584531</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/584531</guid><dc:creator><![CDATA[peterchen]]></dc:creator><pubDate>Tue, 17 Aug 2004 11:30:31 GMT</pubDate></item><item><title><![CDATA[Reply to CString oder string? on Tue, 17 Aug 2004 11:43:26 GMT]]></title><description><![CDATA[<p>peterchen schrieb:</p>
<blockquote>
<blockquote>
<p>komplett MFC-frei halten</p>
</blockquote>
<p>Ich will dich ja nicht in die totalte Dunkelheit führen, Mastah, aber CString gibt es auch ohne MFC <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f576.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--sunglasses"
      title=":sunglasses:"
      alt="🕶"
    /></p>
</blockquote>
<p>Ändert nichts an der Tatsache, dass du die MFC in meinen zukünftigen Projekten nicht mehr finden wirst. Und wenn ich die MFC nicht verwende dann verwende ich auch kein CString, da die Vorteile hinfällig werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/584544</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/584544</guid><dc:creator><![CDATA[Walli]]></dc:creator><pubDate>Tue, 17 Aug 2004 11:43:26 GMT</pubDate></item><item><title><![CDATA[Reply to CString oder string? on Tue, 17 Aug 2004 11:57:48 GMT]]></title><description><![CDATA[<blockquote>
<p>da die Vorteile hinfällig werden</p>
</blockquote>
<p>find ich nicht, aber ist vioelleicht geschmackssache (oder: welche Vorteile sind dir wichtig)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/584558</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/584558</guid><dc:creator><![CDATA[peterchen]]></dc:creator><pubDate>Tue, 17 Aug 2004 11:57:48 GMT</pubDate></item><item><title><![CDATA[Reply to CString oder string? on Tue, 17 Aug 2004 14:23:39 GMT]]></title><description><![CDATA[<p>der fragesteller benutzt aber mfc und desshalb sollte er auch cstring verwenden</p>
<p>unix tom hat auch recht... std::string macht beim klassenexport per dll echte probleme</p>
]]></description><link>https://www.c-plusplus.net/forum/post/584709</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/584709</guid><dc:creator><![CDATA[Sovok]]></dc:creator><pubDate>Tue, 17 Aug 2004 14:23:39 GMT</pubDate></item></channel></rss>