<?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[Eigenen Typ &amp;quot;String&amp;quot; in c++ deffinieren - wie?]]></title><description><![CDATA[<p>Ich benötige einen String mit folgendem Aufbau:</p>
<pre><code>char s1[] = { '\5', 'h', 'a', 'l', 'l', 'o' }; // zum Testen &lt;&lt;, '\0'&gt;&gt; am Ende noch einfügen
</code></pre>
<p>Ich benötige solche Strings zum schnellen Vergleichen in den unterschiedlichsten Dateien; also ist die länge zur Laufzeit solcher Strings bekannt!<br />
Da der Compiler nun die Länge kennt, könnte man ja solch einen Typ generieren.<br />
Möglicherweise mit template ? - um nicht jeden String abzählen zu müssen, ist für die anderen, die diese Klasse benützen müssen, ja nicht gerade angenehm,<br />
daß z.B. diese Initialisierung:</p>
<pre><code>char s1[] = &quot;hallo&quot; // mit s1[0]=5, s1[1]='h' ...
</code></pre>
<p>möglich ist.</p>
<p>Bin für jede Idee offen, die mich diesem String näher bringt.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/242242/eigenen-typ-quot-string-quot-in-c-deffinieren-wie</link><generator>RSS for Node</generator><lastBuildDate>Sun, 20 Sep 2026 19:40:52 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/242242.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 01 Jun 2009 14:41:34 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Eigenen Typ &amp;quot;String&amp;quot; in c++ deffinieren - wie? on Mon, 01 Jun 2009 14:41:34 GMT]]></title><description><![CDATA[<p>Ich benötige einen String mit folgendem Aufbau:</p>
<pre><code>char s1[] = { '\5', 'h', 'a', 'l', 'l', 'o' }; // zum Testen &lt;&lt;, '\0'&gt;&gt; am Ende noch einfügen
</code></pre>
<p>Ich benötige solche Strings zum schnellen Vergleichen in den unterschiedlichsten Dateien; also ist die länge zur Laufzeit solcher Strings bekannt!<br />
Da der Compiler nun die Länge kennt, könnte man ja solch einen Typ generieren.<br />
Möglicherweise mit template ? - um nicht jeden String abzählen zu müssen, ist für die anderen, die diese Klasse benützen müssen, ja nicht gerade angenehm,<br />
daß z.B. diese Initialisierung:</p>
<pre><code>char s1[] = &quot;hallo&quot; // mit s1[0]=5, s1[1]='h' ...
</code></pre>
<p>möglich ist.</p>
<p>Bin für jede Idee offen, die mich diesem String näher bringt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1719115</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1719115</guid><dc:creator><![CDATA[bastl]]></dc:creator><pubDate>Mon, 01 Jun 2009 14:41:34 GMT</pubDate></item><item><title><![CDATA[Reply to Eigenen Typ &amp;quot;String&amp;quot; in c++ deffinieren - wie? on Mon, 01 Jun 2009 15:10:32 GMT]]></title><description><![CDATA[<p>Ja, Templates sind das Stichwort. Die Länge eines <code>char</code> -Arrays kannst du wie folgt bestimmen:</p>
<pre><code class="language-cpp">template &lt;std::size_t S&gt;
std::size_t length(char (&amp;str)[S])
{
    return S;
}
</code></pre>
<p>Du kannst natürlich auch einen generischen, 1 Zeichen sparenden Typen schreiben:</p>
<pre><code class="language-cpp">template &lt;std::size_t S&gt;
class small_string
{
	private:
		char str[S];

	public:
		small_string(const char* text)
		{
			std::copy(text, text+S, str);
		}

		std::size_t length() const
		{
			return S;
		}

		char&amp; operator[] (std::size_t index)
		{
			assert(index &lt; S);
			return str[index];
		}
};
</code></pre>
<p>Deinen Ideen sind sehr wenige Grenzen gesetzt... <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/1719129</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1719129</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Mon, 01 Jun 2009 15:10:32 GMT</pubDate></item><item><title><![CDATA[Reply to Eigenen Typ &amp;quot;String&amp;quot; in c++ deffinieren - wie? on Mon, 01 Jun 2009 15:13:25 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/20676">@bastl</a>,<br />
Mir ist nicht so ganz klar, was hier eigentlich gegen einen <code>std::string</code> spricht?<br />
<a href="http://www.cplusplus.com/reference/string/string/" rel="nofollow">http://www.cplusplus.com/reference/string/string/</a></p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1719134</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1719134</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Mon, 01 Jun 2009 15:13:25 GMT</pubDate></item><item><title><![CDATA[Reply to Eigenen Typ &amp;quot;String&amp;quot; in c++ deffinieren - wie? on Mon, 01 Jun 2009 16:12:26 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Ja, Templates sind das Stichwort. Die Länge eines <code>char</code> -Arrays kannst du wie folgt bestimmen:</p>
</blockquote>
<p>O.K. vielen dank für diese supper schnelle Antwort.<br />
Dann muss man wohl mit dem 0-char am Ende auskommen und hat halt das zusätzliche byte am Ende.</p>
<p>Dravere schrieb:</p>
<blockquote>
<p>Mir ist nicht so ganz klar, was hier eigentlich gegen einen std::string spricht?</p>
</blockquote>
<p>Da diese Funktionen aus den unterschiedlichsten Instanzen aus aufgerufen werden und aus einem &quot;event&quot; heraus haben manche Instanzen nur einen Zeiger auf den String und müssen die Länge für eine mögliche Übergabe neu berechnen lassen - sehr aufwendig, langsam und Fehleranfällig - mögliches &quot;Ruckeln&quot; auf manchen Rechnern, im schlimmsten Fall hängt sich das Programm auf.<br />
Für einen Thread spielt die Schnelligkeit eher weniger eine Rolle und dort würde ich auch standart Rutinen verwenden.<br />
Da ich jedoch keine langen Strings habe wie du siehst &lt;256 Zeichen, hat mich eher das Problem an sich interressiert.<br />
Ich arbeit möglicherweise mit diesen Funktionen auch auf direkten Wertangaben in Dateien oder verändere den String zur Suchoptimierung</p>
<pre><code>char s1[20];
s1[11]=1;
s1[12]=0; // dann ists aus mit der Länge.
oder char s1[] = {'\1','\0','\0','E','U','R'} // wie lang ist dieser String ?
</code></pre>
<p>Also ich nehme das Bsp. von Nexus mit dem template. Ist einfacher und sicherer. Wenn man mal einen Fehler suchen muss, der durch eine abgehackte Länge verursacht wurde - dann gute Nacht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1719169</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1719169</guid><dc:creator><![CDATA[bastl]]></dc:creator><pubDate>Mon, 01 Jun 2009 16:12:26 GMT</pubDate></item><item><title><![CDATA[Reply to Eigenen Typ &amp;quot;String&amp;quot; in c++ deffinieren - wie? on Mon, 01 Jun 2009 16:20:41 GMT]]></title><description><![CDATA[<p>Ehm, hä? Ich verstehe immer noch nicht, was gegen die Klasse <code>std::string</code> spricht <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="🙂"
    /><br />
Im Gegenteil, es erscheint mir die bessere Lösung zu sein. <code>std::string</code> führt schliesslich intern die Grösse des Strings mit.</p>
<p>Zur Lösung von Nexus:<br />
Das geht nur, so lange das Array vorhanden ist. Sobald du ein Zeiger hast, geht diese Lösung nicht mehr.</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1719174</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1719174</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Mon, 01 Jun 2009 16:20:41 GMT</pubDate></item><item><title><![CDATA[Reply to Eigenen Typ &amp;quot;String&amp;quot; in c++ deffinieren - wie? on Mon, 01 Jun 2009 17:02:26 GMT]]></title><description><![CDATA[<p>Dravere schrieb:</p>
<blockquote>
<p><code>std::string</code> führt schliesslich intern die Grösse des Strings mit.</p>
<p>Zur Lösung von Nexus:<br />
Das geht nur, so lange das Array vorhanden ist. Sobald du ein Zeiger hast, geht diese Lösung nicht mehr.</p>
<p>Grüssli</p>
</blockquote>
<p>Auch hää, wäre mir neu. gib dir mal den Wert c_string[0] aus.</p>
<p>Genau, sobald du einen Zeiger hast geht das mit c-string nicht mehr bzw. schwerer, da der c-String seine Länge nicht anthält sondern sie mit 0 als Ende markiert.<br />
Vielleicht benützt du eine andere lib, Der Compiler kann jedoch nur c-Strings und gibt dir auch als sizeof den String bis zur abschließenden 0.<br />
Wir sind hier nicht in Pascal oder Fortran ...<br />
Ich check das mal aber da müsste ich mich stark irren ...<br />
Ne, stimmt und c-strings machen mir riesen Probleme sehe ich gerade. - kommen also überhaupt nicht in Frage dann schon eher QString.</p>
<p>Sorry.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1719189</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1719189</guid><dc:creator><![CDATA[bastl]]></dc:creator><pubDate>Mon, 01 Jun 2009 17:02:26 GMT</pubDate></item><item><title><![CDATA[Reply to Eigenen Typ &amp;quot;String&amp;quot; in c++ deffinieren - wie? on Mon, 01 Jun 2009 17:26:58 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">#include &lt;string&gt;
#include &lt;iostream&gt;

int main()
{
  std::string str = &quot;hello&quot;;
  std::cout &lt;&lt; str.length() &lt;&lt; sd::endl; // 5

  char const* p = str.c_str(); // für C Interfaces.

  std::string &lt;&lt; str[0] &lt;&lt; std::endl; // h

  // Zudem:
  char arr[] = &quot;hello&quot;;

  std::cout &lt;&lt; sizeof(arr) &lt;&lt; std::endl; // 5
  std::cout &lt;&lt; sizeof(p) &lt;&lt; std::endl; // 4 oder 8 (32 oder 64 Bit)

  return 0;
}
</code></pre>
<p><code>QString</code> ? Dir ist bewusst, dass ein <code>QString</code> nichts mit Standard C++ zu tun hat und aus dem Qt Framework stammt? Wie gesagt, <code>std::string</code> , bzw. <code>std::wstring</code> , bzw. <code>std::basic_string</code> , ist die Stringklasse aus der Standardbibliothek.</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1719203</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1719203</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Mon, 01 Jun 2009 17:26:58 GMT</pubDate></item><item><title><![CDATA[Reply to Eigenen Typ &amp;quot;String&amp;quot; in c++ deffinieren - wie? on Mon, 01 Jun 2009 18:09:49 GMT]]></title><description><![CDATA[<p>Dravere schrieb:</p>
<blockquote>
<p>Dir ist bewusst, dass ein <code>QString</code> nichts mit Standard C++ zu tun hat und aus dem Qt Framework stammt?</p>
<p>Grüssli</p>
</blockquote>
<p>Jo, ich programmiere mit QT, also alles i.O. Und es ist allseits bekannt, daß c-Strings nicht so der Hit sind. Eine Lösung muss jedoch bestmöglichst den Zweck erfüllen und möglichst kompatibel bleiben, also hast du schon recht möglichst c-nahe libs zu verwenden. Für meinen Zweck sind sie aber nicht geeignet, umsomehr der &quot;Pascal String&quot; also werde ich auf den zurückgreifen. Is ja Programm intern und hat keine Auswirkung auf Kompatibilität.<br />
C++ will halt möglicht uneingeschrängt bleiben und haben so diesen c-String gewählt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1719232</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1719232</guid><dc:creator><![CDATA[bastl]]></dc:creator><pubDate>Mon, 01 Jun 2009 18:09:49 GMT</pubDate></item><item><title><![CDATA[Reply to Eigenen Typ &amp;quot;String&amp;quot; in c++ deffinieren - wie? on Mon, 01 Jun 2009 18:19:13 GMT]]></title><description><![CDATA[<p>Was redest du da? <strong>Nochmals</strong>, <code>std::string</code> gehört zur <strong>C++-Standardbibliothek</strong>. Du bleibst also <strong>voll und ganz kompatibel</strong>, wenn du das benutzt. Im Übrigen ist die Benutzung noch komfortabler und weniger fehleranfällig als mit irgendwelchen C-Strings.</p>
<p>Ich habe dir am Anfang so eine &quot;spezielle&quot; Lösung gepostet, weil ich dachte, du hättest einen Grund für solche Strings, zum Beispiel, weil du zur Compilezeit die Grösse wissen müsstest. Aber ich habe mich wohl geirrt, normale Strings sind die bessere Wahl.</p>
<p>Übrigens, was hat das mit Pascal-Strings und dem anderen Zeug zu tun? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1719239</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1719239</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Mon, 01 Jun 2009 18:19:13 GMT</pubDate></item><item><title><![CDATA[Reply to Eigenen Typ &amp;quot;String&amp;quot; in c++ deffinieren - wie? on Mon, 01 Jun 2009 18:22:41 GMT]]></title><description><![CDATA[<p>bastl schrieb:</p>
<blockquote>
<p>...gib dir mal den Wert c_string[0] aus.</p>
<p>Genau, sobald du einen Zeiger hast geht das mit c-string nicht mehr bzw. schwerer, da der c-String seine Länge nicht anthält sondern sie mit 0 als Ende markiert....</p>
</blockquote>
<p>Also nun bin ich genauso verwirrt und neugierig wie Dravere ...<br />
Kann es sein, dass Du von C-Strings sprichst, wo er von std::string (etwas ganz Anderes) spricht?</p>
<p>Deine Forderung (&quot;bestmöglichen Zweck erfüllen&quot; und &quot;kompatible wie möglich&quot;) scheint jedenfalls auch mir am Besten durch std::string erfüllbar - und ich habe irgendwie immer noch kein Argument gelesen (oder verstanden), was dem widerspräche.</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1719241</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1719241</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Mon, 01 Jun 2009 18:22:41 GMT</pubDate></item><item><title><![CDATA[Reply to Eigenen Typ &amp;quot;String&amp;quot; in c++ deffinieren - wie? on Wed, 03 Jun 2009 19:57:10 GMT]]></title><description><![CDATA[<p>Simon2 schrieb:</p>
<blockquote>
<p>bastl schrieb:</p>
<blockquote>
<p>...gib dir mal den Wert c_string[0] aus.</p>
<p>Genau, sobald du einen Zeiger hast geht das mit c-string nicht mehr bzw. schwerer, da der c-String seine Länge nicht anthält sondern sie mit 0 als Ende markiert....</p>
</blockquote>
<p>Also nun bin ich genauso verwirrt und neugierig wie Dravere ...<br />
Kann es sein, dass Du von C-Strings sprichst, wo er von std::string (etwas ganz Anderes) spricht?</p>
</blockquote>
<p>Ich dachte, daß allseits bekannt ist wie Strings in C, C++ verarbeitet werden.<br />
Also C-Strings sind vom typ char abgeleitet genauso wie std::string oder &lt;&lt;char str[] = &quot;text&quot;&gt;&gt;, nur daß &lt;&lt;char str[]&gt;&gt; deutlich mehr Freiheiten hat als std::string (ist eine Klasse).</p>
<p>(Nachfolgendes ist nicht 100%ig sicher)<br />
Nach jeder Veränderung eines std::string wird die Länge des Strings beim Aufruf von sdt::length() neu berechnet mit oder ähnlich</p>
<pre><code>int i=0
while( string[i]!=0 ) i++;
return i;
</code></pre>
<p>.</p>
<p>Wenn ein String an Position 0 keine Längenangabe hat, dann führt er auch seine Länge nicht mit sich !!!</p>
<p>Dravere schrieb:</p>
<blockquote>
<pre><code>std::string str = &quot;hello&quot;;
</code></pre>
</blockquote>
<p>hello wird als c-String zu &lt;&lt;hello0&gt;&gt;, str[0] = h bzw. 104 und somit nicht 5 oder 6.<br />
Hat man nun einen std::string, der nicht const ist in einer for-Schleife:</p>
<pre><code>for( int i=0; i&lt;str.length(); i++)
</code></pre>
<p>so wird jedesmal die Länge der Abbruchbedingung durch einen Funktionaufruf übermittelt und nicht direckt durch eine Speicherangabe (wie bei pascal String (char)str[0]).<br />
In c++ bedeutet dann gutes programmieren:</p>
<pre><code>int l = str.length();
for( int i=0; i &lt; l; i++)
</code></pre>
<p>wobei eine Längenänderung (z.B Teile ersetzen) des Strings und ein anschließender Zugriff über eine sdt:: Funktion in der Schleife nicht vorkommen darf, sonst ist die Mühe umsonst und die Länge wird neu berechnet.<br />
(Ende des &lt;&lt;Nachfolgendes ist nicht 100%ig sicher&gt;&gt;)</p>
<p>Ganz im gegensatz zu Pascal Strings wo man selbst dafür sorgen muss mit new das array zu erweitern und die Länge neu eintragen kann, wenn man will, oder entsprechende Member schreibt.<br />
Das erlaubt unheimliche Performance gegenüber c-Strings, die nicht entwickelt wurden um in einer for Schleife auf ihre Elemente zuzugreifen.</p>
<p>Für die die jetzt anfangen zu grübeln:<br />
Sobald ich die Länge zu einem String speichere auch in einer Extra Variablen, habe ich das Prinzip Pascal String und nichts anderes, nur in einer etwas freieren Version. Kompakter und präziser ist es halt, wenn man die Längenangabe direkt im String speichert. Ob man jetzt 1, 4 oder 8 Byte für die Längenangabe verwendet ist im Prinzip egal.</p>
<p>Die Diskusion Pascal Strings in den c++ Standard aufzunehmen gab es schon und wurde abgelehnt.</p>
<p>Einfach im Netz googlen, dann erklärt sich das Problem von selbst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1720665</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1720665</guid><dc:creator><![CDATA[bastl]]></dc:creator><pubDate>Wed, 03 Jun 2009 19:57:10 GMT</pubDate></item><item><title><![CDATA[Reply to Eigenen Typ &amp;quot;String&amp;quot; in c++ deffinieren - wie? on Thu, 04 Jun 2009 06:00:03 GMT]]></title><description><![CDATA[<p>bastl schrieb:</p>
<blockquote>
<p>...unsinn...</p>
</blockquote>
<p>Nichts für ungut, aber da Du hier derart mit Deiner Unwissenheit glänzt, wäre <code>std::string</code> wirklich die beste Wahl. Das ist am sichersten.<br />
Und nein, die Größe wird mit allergrößter Wahrscheinlichkeit nicht bei jedem Aufruf von <code>std::string::size()</code> neu berechnet.<br />
Und mit Pascal-Strings hat das auch nichts zu tun. Das sind in Standardpascal erstmal auch nur char-Arrays fester Länge. Ich schätze mal, Du meinst die Turbopascal Version (und die der Derivate).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1720757</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1720757</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Thu, 04 Jun 2009 06:00:03 GMT</pubDate></item><item><title><![CDATA[Reply to Eigenen Typ &amp;quot;String&amp;quot; in c++ deffinieren - wie? on Thu, 04 Jun 2009 07:45:57 GMT]]></title><description><![CDATA[<p>OK, ich harke da mal ein wenig auseinander:</p>
<p>bastl schrieb:</p>
<blockquote>
<p>...<br />
Ich dachte, daß allseits bekannt ist wie Strings in C, C++ verarbeitet werden....</p>
</blockquote>
<p>Da es in C keine std::string gibt, kann es schonmal nicht gleich sein, wie die beiden Sprachen diese &quot;verarbeiten&quot;.</p>
<p>bastl schrieb:</p>
<blockquote>
<p>...<br />
Also C-Strings sind vom typ char abgeleitet ...</p>
</blockquote>
<p>Was Du mit &quot;abgeleitet&quot; meinst, ist mir hier nicht klar, aber es spricht nichts dagegen std::basic_string&lt;my_own_character_type&gt; zu verwenden (außer evtl. unnötiger Mehraufwand) - und dann hat string überhaupt nichts mehr mit char zu tun.</p>
<p>bastl schrieb:</p>
<blockquote>
<p>...nur daß &lt;&lt;char str[]&gt;&gt; deutlich mehr Freiheiten hat als std::string (ist eine Klasse)....</p>
</blockquote>
<p>Was soll ein char-Arry an &quot;Freiheiten&quot; mehr haben als std::string? Und was soll das mit der &quot;Klasseneigenschaft&quot; zu tun haben?</p>
<p>bastl schrieb:</p>
<blockquote>
<p>...<br />
(Nachfolgendes ist nicht 100%ig sicher)<br />
...</p>
</blockquote>
<p>Das ist nicht nur nicht sicher, sondern sogar ziemlich sicher falsch!<br />
Zwar gibt der C++-Standard dem StdLib-Entwickler diesbezüglich keine Vorgabe, aber der wäre schon sehr dämlich, wenn er aus</p>
<pre><code class="language-cpp">std::string s1 = s2 + s3;
</code></pre>
<p>den o.g. Code machen würde. std::string hat einfach ein Attribut (ist eine &quot;Klasse&quot;, wie Du schon zurecht bemerkt hast und als solche kann es jede Menge interne Attribute haben), das die Länge hält und es besteht gar nicht die Notwendigkeit, diese Information irgendwo in den internen Buffer zu &quot;pulen&quot; (weder an den &quot;Anfang&quot; noch implizit via 0-Terminierung).<br />
Kurz gesagt: Was Du als &quot;tollen Performancetrick&quot; <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="😉"
    /> anpreist (nämlich das &quot;Merken der Längeninfo in einer Variable), macht std::string sowieso schon.</p>
<p>bastl schrieb:</p>
<blockquote>
<p>...Ganz im gegensatz zu Pascal Strings wo man selbst dafür sorgen muss mit new das array zu erweitern und die Länge neu eintragen kann, wenn man will, oder entsprechende Member schreibt. ...</p>
</blockquote>
<p><em>WAS</em> ist &quot;...im Gegensatz zu Pascal Strings ...&quot;?<br />
Ich vermute, Du sprichst von der std::string-internen Speicherverwaltung. Natürlich kann es sein, dass der eine oder andere Experte in seiner ganz speziellen Anwendug hier und da noch ein wenig optimieren kann - aber in 99,9% der Fälle ist das eher eine theoretische Möglichkeit. Du kannst davon ausgehen, das die StdLib-Etnwickler auch keine Dummköpfe sind ... und letztlich nutzen sie genauso new[]/delete[] wie Du das tätest.<br />
An einen &quot;Unheimliche Performance&quot;-Vorteil glaube ich da schonmal gar nicht.</p>
<p>Sagen wir mal so: Selbst <em>ich</em> würde wohl aus dem Stand eine bessere std::string-Implementierung hinbekommen als Du da beschreibst - und ich gehe davon aus, dass die StdLib-Entwickler eher mehr (vermutlich deutlich) Ahnung und Ideen und Zeit dafür haben.<br />
So ziemlich Nichts von Deinen Mutmaßung über das interne Handling von Strings wird im Standard be- geschweige denn vorschrieben....</p>
<p>bastl schrieb:</p>
<blockquote>
<p>...<br />
Einfach im Netz googlen, dann erklärt sich das Problem von selbst.</p>
</blockquote>
<p>Ich würde eher zu einem guten C++-Buch raten.</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1720791</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1720791</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Thu, 04 Jun 2009 07:45:57 GMT</pubDate></item><item><title><![CDATA[Reply to Eigenen Typ &amp;quot;String&amp;quot; in c++ deffinieren - wie? on Thu, 04 Jun 2009 08:59:06 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/20676">@bastl</a>,<br />
Es wurde ja schon gesagt, ich will es nur nochmals betonen. Das ist ja absoluter Humbug vom ersten bis zum letzten Wort!</p>
<p><code>std::string</code> , wie auch ein <code>C-String</code> , sind nicht von <code>char</code> abgeleitet.</p>
<p>Ein <code>char[]</code> hat deutlich weniger Freiheiten als ein <code>std::string</code> ! Ein <code>char[]</code> kannst du nicht mal sinnvoll kopieren. Ein <code>std::string</code> kann einfach durch Zuweisung kopiert werden. Du kannst einen std::string auch ganz einfach vergrössern lassen. Und noch vieles mehr, die Liste geht fast ins unendliche, lies doch nur mal die Referenz:<br />
<a href="http://www.cplusplus.com/reference/string/string/" rel="nofollow">http://www.cplusplus.com/reference/string/string/</a></p>
<p>Zudem ist <code>std::string</code> grundsätzlich ein typedef auf <code>std::basic_string&lt;char, std::char_trais&lt;char&gt;, std::allocator&lt;char&gt; &gt;</code> . Deshalb gibt es ja auch <code>std::wstring</code> . In Zukunft wird es auch noch <code>std::u16string</code> und <code>std::u32string</code> geben.</p>
<p>Die Länge eines <code>std::string</code> wird nicht immer neu berechnet, sondern sie wird mitgeführt. Nicht ohne Grund verbraucht ein <code>std::string</code> 28 Bytes an Speicher. Er führt nämlich nicht nur die Grösse mit, sondern meistens auch noch einen Capacity-Wert, weil dein <code>std::string</code> wahrscheinlich sinnvollerweise immer ein wenig mehr Speicher allokiert, als er benötigt, so kann er ganz einfach expandieren.</p>
<p>Allerdings kann ich dir deine Aussage der Neuberechnung auch ganz einfach entkräften. Ein <code>std::string</code> darf mehrere <code>'\0'</code> s enthalten:</p>
<pre><code class="language-cpp">#include &lt;string&gt;
#include &lt;iostream&gt;

int main()
{
  std::string str;

  str += &quot;hello&quot;;
  str += '\0';
  str += &quot; wo&quot;;
  str += '\0';
  str += &quot;rld!&quot;:

  std::cout &lt;&lt; str.length() &lt;&lt; std::endl;
  // Ausgabe: 14

  return 0;
}
</code></pre>
<p>Die Länge eines <code>std::string</code> wird auch nicht im Array gespeichert, sondern eben separat in einer Variable vom Typ <code>std::size_t</code> .</p>
<p>Anmerkung: Über einen <code>std::string</code> iterieren tut man übrigens oft mit den Iteratoren.</p>
<p>Und wie war das? C-Strings wurden nicht dazu entwickelt, um auf ihre Elemente in einer For-Schleife zuzugreifen? Klar doch, damit wären alle C-String Funktionen überflüssing:<br />
<a href="http://www.cplusplus.com/reference/clibrary/cstring/" rel="nofollow">http://www.cplusplus.com/reference/clibrary/cstring/</a></p>
<p>Aber wahrscheinlich hast du den <code>std::string</code> gemeint und dich nur verschrieben. Mal schauen, <code>std::string</code> ünterstützt das Iteratoren-Konzept und viele von den folgenden Funktionen brauchen For-Schleifen:<br />
<a href="http://www.cplusplus.com/reference/algorithm/" rel="nofollow">http://www.cplusplus.com/reference/algorithm/</a></p>
<p>Allerdings kannst du auch mit einem Index problemlos in einer Schleife darauf zugreifen.</p>
<p>bastl schrieb:</p>
<blockquote>
<p>Einfach im Netz googlen, dann erklärt sich das Problem von selbst.</p>
</blockquote>
<p>Hast du dir so C++ beigebracht? Dann erstaunt es mich nicht mehr so sehr. Ich empfehle dir dringend, dass du C++ sinnvoll lernst, am besten ein Buch liest. Empfehlungen:<br />
C++ Primer<br />
Thinking in C++ 1&amp;2 (auch gratis als PDF erhältlich, nur Englisch)</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1720837</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1720837</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Thu, 04 Jun 2009 08:59:06 GMT</pubDate></item><item><title><![CDATA[Reply to Eigenen Typ &amp;quot;String&amp;quot; in c++ deffinieren - wie? on Thu, 04 Jun 2009 16:05:22 GMT]]></title><description><![CDATA[<p>Beachtet const string und string werden absolut unterschiedlich behandelt!<br />
Und die Verwendung von size_t bringt schon die dringlichkeit von Pascal Strings zum Ausdruck. Alles strebt förmlich nach Verwendung von Pascal Strings, so auch std::string.<br />
Da nun alle in C++ im Prinzip Pascal Strings verwenden - wie ich nun mitbekommen habe, stört mich in C++ nur eins:<br />
Warum kann der Compiler mir die Stringlänge nicht direkt initialisieren?<br />
Der weiß die doch zur Kompilierungszeit!<br />
Z.B.: &quot;hallo&quot; ist vom Typ char[6] dann müsste ich doch nicht selbst die Stringlänge bei der Initialisierung einbauen.</p>
<p>Makro? Definition? irgendwas einfaches, was keine Spuren im Programmkode hinterläßt.</p>
<p>Muß da noch recherchieren, obs da nicht doch irgendwas giebt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1721194</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1721194</guid><dc:creator><![CDATA[bastl]]></dc:creator><pubDate>Thu, 04 Jun 2009 16:05:22 GMT</pubDate></item><item><title><![CDATA[Reply to Eigenen Typ &amp;quot;String&amp;quot; in c++ deffinieren - wie? on Thu, 04 Jun 2009 16:16:22 GMT]]></title><description><![CDATA[<p>bastl schrieb:</p>
<blockquote>
<p>Beachtet const string und string werden absolut unterschiedlich behandelt!</p>
</blockquote>
<p><code>const std::string</code> ist konstant. Da es zur Standardbibliothek gehört, sind dem Compiler vielleicht gewisse Optimierungen möglich. Aber mehr nicht, keine Ahnung worauf du abzielst.</p>
<p>bastl schrieb:</p>
<blockquote>
<p>Alles strebt förmlich nach Verwendung von Pascal Strings, so auch std::string.<br />
Da nun alle in C++ im Prinzip Pascal Strings verwenden</p>
</blockquote>
<p>Du mit deinen Pascal-Strings... Was gefällt dir an den C++-Strings nicht? Und wieso vergleichst du dauernd mit Pascal?</p>
<p>bastl schrieb:</p>
<blockquote>
<p>Warum kann der Compiler mir die Stringlänge nicht direkt initialisieren?<br />
Der weiß die doch zur Kompilierungszeit!</p>
</blockquote>
<p>Nein, in den meisten Fällen nicht. <code>std::string</code> wird normalerweise nicht dazu verwendet, Stringliterale zu speichern, dafür reicht <code>const char*</code> . Und was stellst du dir unter &quot;direkt initialisieren&quot; vor? Dass zur Compilezeit Speicher angefordert wird und sich das zur Laufzeit erübrigt? Ich hoffe nicht.</p>
<p>bastl schrieb:</p>
<blockquote>
<p>Z.B.: &quot;hallo&quot; ist vom Typ char[6] dann müsste ich doch nicht selbst die Stringlänge bei der Initialisierung einbauen.</p>
</blockquote>
<p>Dann nimm doch eben einen <code>char[6]</code> statt eines <code>std::string</code> s oder <code>char*</code> s... <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>Ich hab ehrlich gesagt keine Ahnung was du überhaupt willst. Die ganze Zeit redest du von irgendwelchen Pascal-Strings und drückst dich unklar aus. Also nochmals: Was ist am Status Quo nicht gut und was hindert dich daran, normale Arrays zu benutzen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1721200</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1721200</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Thu, 04 Jun 2009 16:16:22 GMT</pubDate></item><item><title><![CDATA[Reply to Eigenen Typ &amp;quot;String&amp;quot; in c++ deffinieren - wie? on Thu, 04 Jun 2009 16:15:26 GMT]]></title><description><![CDATA[<p>Ich dachte, er wollte einfach nur das hier wissen:</p>
<pre><code class="language-cpp">const char[] hallo = &quot;hallo&quot;;
</code></pre>
<p>ansonsten hf noch hier <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_tongue"
      title=":P"
      alt="😛"
    /></p>
<p>bb</p>
<p>PS: Der Thread-Titel wird beim schreiben noch immer nicht richtig angezeigt -.-</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1721203</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1721203</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Thu, 04 Jun 2009 16:15:26 GMT</pubDate></item><item><title><![CDATA[Reply to Eigenen Typ &amp;quot;String&amp;quot; in c++ deffinieren - wie? on Thu, 04 Jun 2009 16:17:36 GMT]]></title><description><![CDATA[<p>bastl schrieb:</p>
<blockquote>
<p>Beachtet const string und string werden absolut unterschiedlich behandelt!</p>
</blockquote>
<p>Hä? Was willst du uns damit sagen?</p>
<p>bastl schrieb:</p>
<blockquote>
<p>Und die Verwendung von size_t bringt schon die dringlichkeit von Pascal Strings zum Ausdruck. Alles strebt förmlich nach Verwendung von Pascal Strings, so auch std::string.</p>
</blockquote>
<p>Noch mehr, hä? Ein C String ist bewusst nicht so aufgebaut, wie in Pascal, weil sonst einiges ziemlich seltsam wäre. Mit char Arrays kannst du rohen Speicher verwalten.<br />
Ein Beispiel aus C:</p>
<pre><code class="language-cpp">char buffer[sizeof(int)];
int* p = (int*)buffer;
</code></pre>
<p>Wie bitte sollte man hier Pascal Strings reinbringen. Absolut unmöglich, da müsste man das Sprachkonzept zuerst verändern. Komm darüber hinweg, dass man es in C nunmal anders löst.</p>
<p>bastl schrieb:</p>
<blockquote>
<p>Da nun alle in C++ im Prinzip Pascal Strings verwenden ...</p>
</blockquote>
<p>Also das stimmt so nicht, aber von mir aus, wenn du von deinem Pascal nicht loskommen kannst.</p>
<p>bastl schrieb:</p>
<blockquote>
<p>Z.B.: &quot;hallo&quot; ist vom Typ char[6] ...</p>
</blockquote>
<p>Das ist schonmal insofern falsch, als dass &quot;hallo&quot; den Typ char const[6] hat.</p>
<p>bastl schrieb:</p>
<blockquote>
<p>... dann müsste ich doch nicht selbst die Stringlänge bei der Initialisierung einbauen.</p>
</blockquote>
<p>Musst du ja auch nicht. Schau dir nur meine Codes an, welche ich hier schon oft gezeigt habe:</p>
<pre><code class="language-cpp">std::string str = &quot;hello&quot;; // nicht nötig
char const* p = &quot;hello&quot;;   // nicht nötig
char arr[] = &quot;hello&quot;;      // nicht nötig
</code></pre>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1721206</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1721206</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Thu, 04 Jun 2009 16:17:36 GMT</pubDate></item><item><title><![CDATA[Reply to Eigenen Typ &amp;quot;String&amp;quot; in c++ deffinieren - wie? on Thu, 04 Jun 2009 17:15:09 GMT]]></title><description><![CDATA[<p>Dravere schrieb:</p>
<blockquote>
<p>Hä? Was willst du uns damit sagen?</p>
</blockquote>
<p>Das geht die was an, die meinen, daß die länge nicht berechnet wird.</p>
<p>Dravere schrieb:</p>
<blockquote>
<p>Ein Beispiel aus C:</p>
<pre><code class="language-cpp">char buffer[sizeof(int)];
int* p = (int*)buffer;
</code></pre>
<p>Wie bitte sollte man hier Pascal Strings reinbringen. Absolut unmöglich, da müsste man das Sprachkonzept zuerst verändern. Komm darüber hinweg, dass man es in C nunmal anders löst.</p>
</blockquote>
<p>Ich glaube du hast nicht verstanden, was Pascal Strings sind, oder?<br />
Und was willst du mit diesem eingeschränkten Bsp. überhaupt aussagen?<br />
Und natürlich bekommt man da einen P-String rein, erst bei sizeof(char) wirds eng!</p>
<p>Dravere schrieb:</p>
<blockquote>
<p>Musst du ja auch nicht. Schau dir nur meine Codes an, welche ich hier schon oft gezeigt habe:</p>
<pre><code class="language-cpp">std::string str = &quot;hello&quot;; // nicht nötig
char const* p = &quot;hello&quot;;   // nicht nötig
char arr[] = &quot;hello&quot;;      // nicht nötig
</code></pre>
</blockquote>
<p>Das erste wird intern zu einem abgewandelten P-String.<br />
Sind leider keine P-Strings!!! - Also Bitte!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1721246</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1721246</guid><dc:creator><![CDATA[bastl]]></dc:creator><pubDate>Thu, 04 Jun 2009 17:15:09 GMT</pubDate></item><item><title><![CDATA[Reply to Eigenen Typ &amp;quot;String&amp;quot; in c++ deffinieren - wie? on Thu, 04 Jun 2009 17:40:47 GMT]]></title><description><![CDATA[<p>Du glaubst wirklich, dass im folgenden Code die Länge des Strings mehrmals berechnet wird?</p>
<pre><code class="language-cpp">for( int i=0; i&lt;str.length(); i++)
</code></pre>
<p>Das ist falsch. Schau dir doch mal den Code deiner Implementierung an. Das sollte in etwa so aussehen:</p>
<pre><code class="language-cpp">template &lt;...&gt;
basic_string&lt;...&gt;::length() const
{
    return m_length;
}
</code></pre>
<p>Da wird nicht nach einem Null-Charakter gesucht oder ähnliches.</p>
<p>Gruß<br />
Don06</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1721271</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1721271</guid><dc:creator><![CDATA[Don06]]></dc:creator><pubDate>Thu, 04 Jun 2009 17:40:47 GMT</pubDate></item><item><title><![CDATA[Reply to Eigenen Typ &amp;quot;String&amp;quot; in c++ deffinieren - wie? on Thu, 04 Jun 2009 17:43:54 GMT]]></title><description><![CDATA[<p>bastl schrieb:</p>
<blockquote>
<p>Das geht die was an, die meinen, daß die länge nicht berechnet wird.</p>
</blockquote>
<p>Bei den meisten <code>std::string</code> -Implementierungen wird sie das auch nicht. Da du das bestimmt wieder besser weisst, will ich dir mal die Standardbibliothek vom MSVC++ zeigen:</p>
<pre><code class="language-cpp">size_type __CLR_OR_THIS_CALL length() const
		{	// return length of sequence
		return (_Mysize);
		}

	size_type __CLR_OR_THIS_CALL size() const
		{	// return length of sequence
		return (_Mysize);
		}
</code></pre>
<p>Siehst du? Es wird eine Membervariable zurückgegeben.</p>
<p>bastl schrieb:</p>
<blockquote>
<p>Ich glaube du hast nicht verstanden, was Pascal Strings sind, oder?</p>
</blockquote>
<p>Da diese Pascal-Strings dermassen wichtig sind und C++ ohne sie folglich abgrundtief schlecht sein muss, könntest du vielleicht mal erklären, wie diese funktionieren. Nicht jeder hat früher mal Pascal programmiert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1721273</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1721273</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Thu, 04 Jun 2009 17:43:54 GMT</pubDate></item><item><title><![CDATA[Reply to Eigenen Typ &amp;quot;String&amp;quot; in c++ deffinieren - wie? on Thu, 04 Jun 2009 18:17:43 GMT]]></title><description><![CDATA[<p>imho ist unter pascal string einfach nur zu verstehen, dass im ersten zeichen (also index 0) die länge steht - was allerdings zur folge hat, dass das ganze nur bis zu 255 zeichen lang werden konnte - das erkannte man dann iwann als fehler und hatte glaub ich dann ne ganz normale variable für die länge eingeführt...</p>
<p>aber naja - da c++ keine pascal strings hat, ist es eben einfach doof - und man muss auf zwang versuchen, diese hässlichen gebilde, die imho weit weniger umfangreich als std::string sind, nachzubauen und sich dann wieder beschweren, dass es so schwer ist...</p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1721306</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1721306</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Thu, 04 Jun 2009 18:17:43 GMT</pubDate></item><item><title><![CDATA[Reply to Eigenen Typ &amp;quot;String&amp;quot; in c++ deffinieren - wie? on Thu, 04 Jun 2009 18:18:27 GMT]]></title><description><![CDATA[<p>Alles bis auf eines wurde ja schon beantwortet, also lasse ich den Rest weg. Du solltest aber echt einmal sinnvoll C++ lernen, vor allem wenn du so überzeugt von deinen falschen Annahmen bist.</p>
<p>bastl schrieb:</p>
<blockquote>
<p>Ich glaube du hast nicht verstanden, was Pascal Strings sind, oder?</p>
</blockquote>
<p>Doch, doch. Ein Pascalstring hat an der Stelle 0 die Länge des Strings gespeichert.</p>
<p>bastl schrieb:</p>
<blockquote>
<p>Und was willst du mit diesem eingeschränkten Bsp. überhaupt aussagen?<br />
Und natürlich bekommt man da einen P-String rein, erst bei sizeof(char) wirds eng!</p>
</blockquote>
<p>Also ok, vielleicht war auch meine Wortwahl ein wenig schlecht, aber mit dem reinbringen war gemeint, wie man es in die Sprache bringen soll. Aber du hast ja anscheinend auch sonst nicht bemerkt, um was es mir ging.</p>
<p>Die Sache ist, dass ein Array in C und C++ nichts anderes ist, als eine gewisse Anzahl an Bytes und in diesen Bytes ist nichts anders als die Daten. Der Kompiler tut da überhaupt nichts selber rein.</p>
<p>Nehmen wir nochmals mein Beispiel:</p>
<pre><code class="language-cpp">// Normal jetzt:
char buffer[sizeof(int)]; // sizeof(int) gibt meistens 4, also 4 Bytes
int* p = (int*)buffer;
p = 0; // ok, alles 4 Bytes sind jetzt 0

// Wenn das Char Array nach Pascal Strings funktionieren würde:
char buffer[sizeof(int)]; // buffer braucht 5 Bytes, im Byte 0 ist die Grösse des Arrays gespeichert
int* p = (int*)buffer;
p = 0; // Die Grösse vom Array ist 0 -&gt; ??? Fehler ...
</code></pre>
<p>Ein Pascalstring passt einfach nicht in die Sprache C oder C++ rein, weil er gegen das ganze Speicherverwaltungskonzept verstösst.</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1721309</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1721309</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Thu, 04 Jun 2009 18:18:27 GMT</pubDate></item><item><title><![CDATA[Reply to Eigenen Typ &amp;quot;String&amp;quot; in c++ deffinieren - wie? on Fri, 05 Jun 2009 07:26:40 GMT]]></title><description><![CDATA[<p>bastl schrieb:</p>
<blockquote>
<p>...</p>
<p>Dravere schrieb:</p>
<blockquote>
<pre><code class="language-cpp">std::string str = &quot;hello&quot;; // nicht nötig
...
</code></pre>
</blockquote>
<p>Das erste wird intern zu einem abgewandelten P-String. ...</p>
</blockquote>
<p>Die Aussage ist einfach falsch: Da wird nichts &quot;...intern zu einem abgewandelten P-String...&quot;<br />
(es sei denn, du definierst &quot;abgewandelt&quot; als &quot;ersetzt duch std::string&quot;)</p>
<p>Natürlich kannst Du versuchen, die gesamte Welt über P-Strings zu erklären, das bringt aber niemanden weiter - und führt Dich offensichtlich nicht zu einem richtigen Verständnis von std::string.</p>
<p>Ich kenne das ja auch, dass man sich einer neuen Sprache erst einmal in den Denkmodellen der bisher bekannten nähert, aber irgendwann kommt der Punkt, an dem man &quot;springen&quot; muss; an dem man &quot;Java&quot; programmieren muss und nicht mehr &quot;C++ in Java&quot;, &quot;C in C++&quot;, &quot;Cobol in Java&quot; ... oder &quot;Pascal in C++&quot;.<br />
Wer nicht &quot;springt&quot;, wird nie die Eigenschaften (Vor-/Nachteile) der neuen Sprache <em>wirklich</em> durchschauen.</p>
<p>Ich würde sagen: Your choice.</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1721548</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1721548</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Fri, 05 Jun 2009 07:26:40 GMT</pubDate></item><item><title><![CDATA[Reply to Eigenen Typ &amp;quot;String&amp;quot; in c++ deffinieren - wie? on Fri, 05 Jun 2009 21:14:48 GMT]]></title><description><![CDATA[<p>Don06 schrieb:</p>
<blockquote>
<p>Das ist falsch. Schau dir doch mal den Code deiner Implementierung an. Das sollte in etwa so aussehen:</p>
<pre><code class="language-cpp">template &lt;...&gt;
basic_string&lt;...&gt;::length() const
{
    return m_length;
}
</code></pre>
</blockquote>
<p>Das mit dem berechnen ist nicht mein Problem - jedoch gehe ich nochmal kurz darauf ein.- Es geht nicht darum wann und wo die Länge neu Eingetragen wird sondern darum, daß length() ein Funktionsaufruf ist und nicht ein Zeiger auf diese Variable! - also einige Takte mehr benötigt. - Das hat mich irgendwie gestört - ist aber trivial, gauso wie das Problem, das ich hier lösen wollte!<br />
Wenn die Länge nicht gespeichert würde, müsste sie jedesmal neu berechnet werden! - würde keiner machen!<br />
Jedoch ist es zwingend notwendig in C++ diese Variable getrennt vom Array zu halten, da die Aufgabe und Bedeutung der beiden sich total unterscheiden und somit auch deren Aufgaben in der Klasse!<br />
Man benötigt halt immer eine Klasse, auch wenn man nur eine Funktion damit anstebt.</p>
<p>Simon2 schrieb:</p>
<blockquote>
<p>Ich kenne das ja auch, dass man sich einer neuen Sprache erst einmal in den Denkmodellen der bisher bekannten nähert, aber irgendwann kommt der Punkt, an dem man &quot;springen&quot; muss; an dem man &quot;Java&quot; programmieren muss und nicht mehr &quot;C++ in Java&quot;, &quot;C in C++&quot;, &quot;Cobol in Java&quot; ... oder &quot;Pascal in C++&quot;.</p>
</blockquote>
<p>Gut erkannt, und immer wieder möchte man mit Hilfe einer anderen Programmiersprache etwas verdeutlichen oder erklären - man läuft immer auf!<br />
Schlussendlich ist bei effektivster Programmierung der ausführbare Kode im Prinzip bei allen der gleiche.<br />
Bei mir ist das einzigste Problem, daß QStrings nicht mit std::string harmonieren und ich sowiso eine spezial Suche und Vervollständigung im Umgang mit linuxdateien implementiren möchte. Gibt eine spezial Implementierung, ist aber kein Muss sonder eher aufregend und spannend und bringt hier und da noch ein paar Takte weniger - hab ja sonst nichts besseres zu tun!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1722033</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1722033</guid><dc:creator><![CDATA[bastl]]></dc:creator><pubDate>Fri, 05 Jun 2009 21:14:48 GMT</pubDate></item><item><title><![CDATA[Reply to Eigenen Typ &amp;quot;String&amp;quot; in c++ deffinieren - wie? on Fri, 05 Jun 2009 21:29:31 GMT]]></title><description><![CDATA[<p>bastl schrieb:</p>
<blockquote>
<p>Es geht nicht darum wann und wo die Länge neu Eingetragen wird sondern darum, daß length() ein Funktionsaufruf ist und nicht ein Zeiger auf diese Variable! - also einige Takte mehr benötigt.</p>
</blockquote>
<p>Wenn dein Compiler auch nur irgendetwas taugt, kann er den Funktionsaufruf inline erweitern, so daß der Unterschied exakt 0 ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1722037</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1722037</guid><dc:creator><![CDATA[audacia]]></dc:creator><pubDate>Fri, 05 Jun 2009 21:29:31 GMT</pubDate></item></channel></rss>