<?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[Suche nach einer AnsiString-Implementation]]></title><description><![CDATA[<p>Moin,</p>
<p>Ich habe bisher den C++Builder 1 verwendet, möchte jetzt aber zu Code::Blocks+GCC wechseln. Leider habe ich in fast allen bisherigen Projekten AnsiStrings verwendet. Diese scheinen wohl C++Builder-spezifisch zu sein, oder kennt GCC außer std::string auch AnsiString? Wenn nicht, ist der Quelltext einer AnsiString-Implementation irgendwo verfügbar? Sonst müsste ich sie selbst schreiben, was ich mir natürlich ersparen möchte. Und mit einem einfachen typedef ist es auch nicht getan, da sich die beiden Typen ja doch etwas voneinander unterscheiden.<br />
Und gibt es zwischen std::string und AnsiString eigentlich nennenswerte Performanceunterschiede?</p>
<p>Danke im voraus,<br />
Nanyuki</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/201324/suche-nach-einer-ansistring-implementation</link><generator>RSS for Node</generator><lastBuildDate>Wed, 19 Aug 2026 03:25:56 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/201324.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 28 Dec 2007 00:35:42 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Suche nach einer AnsiString-Implementation on Fri, 28 Dec 2007 00:35:42 GMT]]></title><description><![CDATA[<p>Moin,</p>
<p>Ich habe bisher den C++Builder 1 verwendet, möchte jetzt aber zu Code::Blocks+GCC wechseln. Leider habe ich in fast allen bisherigen Projekten AnsiStrings verwendet. Diese scheinen wohl C++Builder-spezifisch zu sein, oder kennt GCC außer std::string auch AnsiString? Wenn nicht, ist der Quelltext einer AnsiString-Implementation irgendwo verfügbar? Sonst müsste ich sie selbst schreiben, was ich mir natürlich ersparen möchte. Und mit einem einfachen typedef ist es auch nicht getan, da sich die beiden Typen ja doch etwas voneinander unterscheiden.<br />
Und gibt es zwischen std::string und AnsiString eigentlich nennenswerte Performanceunterschiede?</p>
<p>Danke im voraus,<br />
Nanyuki</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1427082</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1427082</guid><dc:creator><![CDATA[Nanyuki]]></dc:creator><pubDate>Fri, 28 Dec 2007 00:35:42 GMT</pubDate></item><item><title><![CDATA[Reply to Suche nach einer AnsiString-Implementation on Fri, 28 Dec 2007 09:07:34 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>Wechsle lieber komplett zu std::string. Der bietet eigentlich alles was du brauchst. AnsiString ist außerhalb der Borland-Welt nicht bekannt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1427123</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1427123</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Fri, 28 Dec 2007 09:07:34 GMT</pubDate></item><item><title><![CDATA[Reply to Suche nach einer AnsiString-Implementation on Fri, 28 Dec 2007 09:30:03 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>Performance dürfte sehr ähnlich sein.</p>
<p>Der wichtigste Unterschied den du beim Umstieg zu beachten hast ist das AnsiString die Indizierung der Zeichen mit 1 beginnt, aber std::string mit 0 (wie es ja auch üblich und korrekt ist)</p>
<p>bis bald<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1427130</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1427130</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Fri, 28 Dec 2007 09:30:03 GMT</pubDate></item><item><title><![CDATA[Reply to Suche nach einer AnsiString-Implementation on Sat, 29 Dec 2007 21:11:31 GMT]]></title><description><![CDATA[<p>akari schrieb:</p>
<blockquote>
<p>Der wichtigste Unterschied den du beim Umstieg zu beachten hast ist das AnsiString die Indizierung der Zeichen mit 1 beginnt, aber std::string mit 0 (wie es ja auch üblich und korrekt ist)</p>
</blockquote>
<p>Ja, das ist eines der Probleme bei der Umstellung; da müsste ich überall die Indexierung anpassen, denn</p>
<p>Braunstein schrieb:</p>
<blockquote>
<p>Wechsle lieber komplett zu std::string.</p>
</blockquote>
<p>ich habe zwar vor, in meinen zukünftigen Projekten ausschließlich std::string zu benutzen, jedoch möchte ich eines meiner aktuellen Projekte zu GCC mitnehmen (u.a. um es nach Linux zu portieren). Problem ist, dass es großzügigen Gebrauch von (Ansi)Strings macht und annähernd 100.000 Zeilen umfasst. Ich denke, da ist es schneller, eine AnsiString-Implementierung zu schreiben, als alles anzupassen (und sich dann mit Fehlern herumzuärgern, weil man irgendwo vergessen hat, eins vom Index abzuziehen) <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/1427833</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1427833</guid><dc:creator><![CDATA[Nanyuki]]></dc:creator><pubDate>Sat, 29 Dec 2007 21:11:31 GMT</pubDate></item><item><title><![CDATA[Reply to Suche nach einer AnsiString-Implementation on Sat, 29 Dec 2007 21:33:52 GMT]]></title><description><![CDATA[<p>Mit der Original-AnsiString-Implementierung von Borland fängst du unter Linux nichts an (ich habe die Sourcen, da sie beim BCB5 Professional dabei sind), da diese auf Delphi-Routinen, welche von Inline-Assembler-Code aufgerufen werden, basiert.</p>
<p>Am besten, du schreibst dir gerade einen kleinen Wrapper mit den von dir verwendeten Methoden auf Basis von std::string, z.B.</p>
<pre><code class="language-cpp">namespace System
{

class AnsiString
{
private:
  std::string str;

public:
  AnsiString() {};
  ~AnsiString() {};

  ...

  int Length() const
  {
    return static_cast&lt;int&gt;(str.length());
  }

  char operator [](const int idx) const
  {
    // evtl. noch Index-Check und Exception werfen
    return str[idx-1];
  }
};

} // namespace System
</code></pre>
<p>Die Deklarationen der Methoden kannst du dir in der Header-Datei &quot;VCL/dstring.hpp&quot; anschauen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1427847</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1427847</guid><dc:creator><![CDATA[Th]]></dc:creator><pubDate>Sat, 29 Dec 2007 21:33:52 GMT</pubDate></item><item><title><![CDATA[Reply to Suche nach einer AnsiString-Implementation on Thu, 03 Jan 2008 16:05:37 GMT]]></title><description><![CDATA[<p>akari schrieb:</p>
<blockquote>
<p>Performance dürfte sehr ähnlich sein.</p>
</blockquote>
<p>Leider nicht; AnsiString ist deutlich performanter als die meisten std::string-Implementationen. Das hängt teils mit den bereits erwähnten größtenteils in Assembler implementierten Routinen, teils mit der Referenzzählung zusammen, die in std::string der Einfachheit halber und zwecks Vermeidung von Umständen mit Speicherverwaltungskonflikten verschiedener Module nicht verwendet wird (jedenfalls ist mir noch keine referenzzählende Implementation begegnet).</p>
<p>Ansonsten ist aber der Umstieg auf std::string, bei dringendem Bedarf mithilfe eines Wrappers, sinnvoll. Was die Indizierung angeht, so sei dir angeraten, weniger mit Indizes und eher mit Zeigern auf den String selbst zu arbeiten, da du so die Zugriffe auf die Schnittstelle der Klasse verringerst und Zeiger auch effizienter sein sollten als die Indizierung des Strings. (Daß du einen guten Grund hast, selbst mit den Strings derart umgehen zu müssen, nehme ich an, sonst könntest du ja einfach auf die C-Library zurückgreifen, die die meisten alltäglichen Aufgaben mit in den gebräuchlichen Implementationen nahezu optimaler Effizienz abdeckt.)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1430085</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1430085</guid><dc:creator><![CDATA[audacia|off]]></dc:creator><pubDate>Thu, 03 Jan 2008 16:05:37 GMT</pubDate></item></channel></rss>