<?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[std::string != schneller als compare?]]></title><description><![CDATA[<p>Ist eigentlich != schneller als compare? Da könnte man ja zuerst die Länge anschauen, was bei compare ja nicht geht.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/178509/std-string-schneller-als-compare</link><generator>RSS for Node</generator><lastBuildDate>Sun, 20 Sep 2026 22:02:31 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/178509.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 11 Apr 2007 18:35:05 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to std::string != schneller als compare? on Wed, 11 Apr 2007 18:35:05 GMT]]></title><description><![CDATA[<p>Ist eigentlich != schneller als compare? Da könnte man ja zuerst die Länge anschauen, was bei compare ja nicht geht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1264110</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1264110</guid><dc:creator><![CDATA[@home]]></dc:creator><pubDate>Wed, 11 Apr 2007 18:35:05 GMT</pubDate></item><item><title><![CDATA[Reply to std::string != schneller als compare? on Wed, 11 Apr 2007 21:26:43 GMT]]></title><description><![CDATA[<p>Du meinst wohl strcmp.<br />
Und ob &quot;std::basic_string&lt;char&gt;::operator !=&quot; schneller ist als strcmp kommt wohl sehr darauf an wie beide implementiert sind <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>Wenn &quot;!=&quot; die von dir erwähnte Optimierung verwendet wird es wohl für Strings mit unterschiedlicher Länge schneller sein. Ich hoffe mal dass jede Implementierung die was auf sich hält das tut. Wenn diese Optimierung fehlt, keine Spezialisierung von &quot;std::basic_string&quot; für &quot;char&quot; existiert, und der Compiler nicht wie die Hölle optimieren kann, wird wohl strcmp schneller sein, da strcmp eben speziell auf nullterminierte char Strings optimiert ist (oft sogar &quot;handgeschriebener&quot; Assemblercode), und kein generischer Code wie in std::basic_string&lt;T&gt;.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1264218</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1264218</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Wed, 11 Apr 2007 21:26:43 GMT</pubDate></item><item><title><![CDATA[Reply to std::string != schneller als compare? on Wed, 11 Apr 2007 21:36:05 GMT]]></title><description><![CDATA[<p>Ich nehme an, dass der op!= schneller ist, selbst wenn die Länge der beiden Strings gleich ist. Bei strcmp muss man ja pro Schleifendurchlauf 3 Vergleiche ausführen (==, 2x!=0), bei std::basic_string ist die Länge ja bekannt (außer irgend eine Merkwürdige Implementierung nutzt 0-terminierte Strings in std::basic_string..)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1264222</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1264222</guid><dc:creator><![CDATA[rüdiger]]></dc:creator><pubDate>Wed, 11 Apr 2007 21:36:05 GMT</pubDate></item><item><title><![CDATA[Reply to std::string != schneller als compare? on Wed, 11 Apr 2007 21:45:11 GMT]]></title><description><![CDATA[<p>der code von std::string ist nicht notwendigerweise generisch (und generizität bedeutet an sich ja auch keinen Nachteil). Der Hinweis mit den mehrfachen Operationen bei strcmp ist richtig, auch wenn es nur 2 Vergleiche sind; denn mit '\0' muss man ja nur bei Gleichheit beider Zeichen testen und dann genügt offensichtlich ein Test. Allerdings ist so ein Vergleich bei bekannter Länge effizienter durchzuführen (man denke daran, dass das ganze auf natürliche Weise vektorisiert werden kann bzw. Loop-Unrolling ist trivial möglich). Eine vergleichbare Methode ist für strcmp nur mit bestimmten Low-level-Assembler-Tricks eingeschränkt möglich - dort liest man dann aber leicht über das Stringende hinaus, was nicht ganz unproblematisch ist. Im Übrigen dürfen basic_strings eingebettete Nullen enthalten - 0 als Terminator fällt in jedem Falle aus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1264225</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1264225</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Wed, 11 Apr 2007 21:45:11 GMT</pubDate></item><item><title><![CDATA[Reply to std::string != schneller als compare? on Wed, 11 Apr 2007 22:00:21 GMT]]></title><description><![CDATA[<p>camper schrieb:</p>
<blockquote>
<p>Der Hinweis mit den mehrfachen Operationen bei strcmp ist richtig, auch wenn es nur 2 Vergleiche sind;</p>
</blockquote>
<p>ups! ja, natürlich nur zwei Vergleiche</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1264236</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1264236</guid><dc:creator><![CDATA[rüdiger]]></dc:creator><pubDate>Wed, 11 Apr 2007 22:00:21 GMT</pubDate></item><item><title><![CDATA[Reply to std::string != schneller als compare? on Wed, 11 Apr 2007 22:17:15 GMT]]></title><description><![CDATA[<p>camper schrieb:</p>
<blockquote>
<p>der code von std::string ist nicht notwendigerweise generisch (und generizität bedeutet an sich ja auch keinen Nachteil).</p>
</blockquote>
<p>Die Möglichkeit einer Spezialisierung auf char hab ich ja erwähnt.</p>
<p>Davon abgesehen ist generischer Code deswegen und genau dann &quot;schlecht&quot; (bzw. eben &quot;langsamer&quot;), wenn der Compiler nicht so gut optimieren kann wie ein Mensch mit Hand. Solche Fälle sind selten, aber gerade was sehr sehr einfache Probleme angeht wie eben Strings zu vergleichen kann sowas schonmal vorkommen.</p>
<p>p.S.: mit dem &quot;Länge bekannt&quot; habt ihr natürlich Recht, das ist ein Vorteil der natürlich auch in der Vergleichsschleife selbst zu tragen kommt bzw. kommen kann, daran hatte ich nicht gedacht <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1264242</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1264242</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Wed, 11 Apr 2007 22:17:15 GMT</pubDate></item><item><title><![CDATA[Reply to std::string != schneller als compare? on Thu, 12 Apr 2007 06:22:00 GMT]]></title><description><![CDATA[<p>Sorry, wenn ich mich noch einmische, aber: basic_string übergibt solche Verwaltungsaufgaben wie Vergleiche an seine traits-Klasse. Und die Default-Klasse std::char_traits&lt;char&gt; greift wiederum auf die Funktion memcmp() zurück. (wenn man noch dazunimmt, daß strcmp() letztendlich ebenfalls auf memcmp() zurückgreifen dürfte, bleibt als einziger Vorteil für den String, daß er seine Datenlänge nicht mehr berechnen muß)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1264327</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1264327</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 12 Apr 2007 06:22:00 GMT</pubDate></item><item><title><![CDATA[Reply to std::string != schneller als compare? on Thu, 12 Apr 2007 06:35:16 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p>Sorry, wenn ich mich noch einmische, aber: basic_string übergibt solche Verwaltungsaufgaben wie Vergleiche an seine traits-Klasse. Und die Default-Klasse std::char_traits&lt;char&gt; greift wiederum auf die Funktion memcmp() zurück. (wenn man noch dazunimmt, daß strcmp() letztendlich ebenfalls auf memcmp() zurückgreifen dürfte, bleibt als einziger Vorteil für den String, daß er seine Datenlänge nicht mehr berechnen muß)</p>
</blockquote>
<p>Du beschreibst eine mögliche, wenn auch naheliegende Lösung.</p>
<p>Diese Diskussion ist aus mehreren Gründen unsinnig. Zum einen ist das ganze Implementierungsabhängig. Kein Standard schreibt vor, wie man != mit string oder strcmp implementieren muß.</p>
<p>Ausserdem wenn man die Information braucht, kann man einfach die spezifische Implementierung benchmarken. Wobei viele Einflußgrössen einfliessen. Optimierungen können selbst CPU-Spezifisch unterschiedliche Erfolge aufweisen.</p>
<p>Weiterhin sollte man sich überlegen, ob das wirklich relevant ist. Es gibt selten Programme, wo der Performanceengpasss bei strcmp oder string::operator!= liegt. Und wenn das so ist, sollte man sich fragen, ob der Stringvergleich wirklich notwendig ist.</p>
<p>Tntnet</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1264331</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1264331</guid><dc:creator><![CDATA[tntnet]]></dc:creator><pubDate>Thu, 12 Apr 2007 06:35:16 GMT</pubDate></item><item><title><![CDATA[Reply to std::string != schneller als compare? on Thu, 12 Apr 2007 11:00:26 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p>Sorry, wenn ich mich noch einmische, aber: basic_string übergibt solche Verwaltungsaufgaben wie Vergleiche an seine traits-Klasse. Und die Default-Klasse std::char_traits&lt;char&gt; greift wiederum auf die Funktion memcmp() zurück. (wenn man noch dazunimmt, daß strcmp() letztendlich ebenfalls auf memcmp() zurückgreifen dürfte, bleibt als einziger Vorteil für den String, daß er seine Datenlänge nicht mehr berechnen muß)</p>
</blockquote>
<p>Würde mich wundern, wenn die Implementierungen von strcmp auf memcmp zurückgreifen würden. Das wäre dann ja die doppelte Arbeit.</p>
<p>(Aber die mem*-Funktionen dürften auf den meisten Systemen extrem schnell implementiert sein)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1264500</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1264500</guid><dc:creator><![CDATA[rüdiger]]></dc:creator><pubDate>Thu, 12 Apr 2007 11:00:26 GMT</pubDate></item><item><title><![CDATA[Reply to std::string != schneller als compare? on Thu, 12 Apr 2007 11:02:13 GMT]]></title><description><![CDATA[<p>rüdiger schrieb:</p>
<blockquote>
<p>Würde mich wundern, wenn die Implementierungen von strcmp auf memcmp zurückgreifen würden. Das wäre dann ja die doppelte Arbeit.</p>
</blockquote>
<p>Wieso denn das? Aber selbst wenn die beiden Funktionen jeweils eigenständig arbeiten, dürften sie technisch vergleichbar in der Geschwindigkeit sein (wobei - memcmp() hat einen leichten Vorteil, weil es die Datengröße <em>kennt</em>).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1264502</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1264502</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 12 Apr 2007 11:02:13 GMT</pubDate></item></channel></rss>