<?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[C++ ist machmal echt seltsam]]></title><description><![CDATA[<p>Trotz mittlerweile doch recht langer Erfahrung stolpere ich noch hin und wieder über Unintuitivitäten von C++. So habe ich doch letztens einen Bug produziert dessen Essenz ich hier mal zusammengefasst habe:</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;string&gt;
using namespace std;

int main() {
  string result {&quot;Result: &quot;};
  result += &quot;ABCDEFGHIJKLMNOPQRSTUVWXYZ&quot; + '\n';
  cout &lt;&lt; result;
}
</code></pre>
<p>Das Programm, sieht harmlos aus (zumindest für mich) kompiliert ohne Warnung, passiert alle statischen Codanalys Tests sowie Valgriend und läuft ohne abzustürzen. Es gibt nur etwas anderes aus, als ich erwartet hätte und mittlerweile weiß ich auch, was da passiert. Wisst ihr es auch?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/334663/c-ist-machmal-echt-seltsam</link><generator>RSS for Node</generator><lastBuildDate>Sat, 25 Apr 2026 06:32:53 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/334663.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 01 Oct 2015 09:34:14 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to C++ ist machmal echt seltsam on Thu, 01 Oct 2015 09:34:14 GMT]]></title><description><![CDATA[<p>Trotz mittlerweile doch recht langer Erfahrung stolpere ich noch hin und wieder über Unintuitivitäten von C++. So habe ich doch letztens einen Bug produziert dessen Essenz ich hier mal zusammengefasst habe:</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;string&gt;
using namespace std;

int main() {
  string result {&quot;Result: &quot;};
  result += &quot;ABCDEFGHIJKLMNOPQRSTUVWXYZ&quot; + '\n';
  cout &lt;&lt; result;
}
</code></pre>
<p>Das Programm, sieht harmlos aus (zumindest für mich) kompiliert ohne Warnung, passiert alle statischen Codanalys Tests sowie Valgriend und läuft ohne abzustürzen. Es gibt nur etwas anderes aus, als ich erwartet hätte und mittlerweile weiß ich auch, was da passiert. Wisst ihr es auch?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2469495</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2469495</guid><dc:creator><![CDATA[TNA]]></dc:creator><pubDate>Thu, 01 Oct 2015 09:34:14 GMT</pubDate></item><item><title><![CDATA[Reply to C++ ist machmal echt seltsam on Thu, 01 Oct 2015 09:42:55 GMT]]></title><description><![CDATA[<p>TNA schrieb:</p>
<blockquote>
<p>Wisst ihr es auch?</p>
</blockquote>
<p>Yup.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2469496</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2469496</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Thu, 01 Oct 2015 09:42:55 GMT</pubDate></item><item><title><![CDATA[Reply to C++ ist machmal echt seltsam on Thu, 01 Oct 2015 09:53:25 GMT]]></title><description><![CDATA[<p>Ich hab am Anfang C mit C++ Compiler programmiert, also eher C mit std::cout/std::cin. So was hat mich dann überzeugt nochmal richtig C++ zu lernen. Deshalb war das recht offensichtlich für mich.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2469497</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2469497</guid><dc:creator><![CDATA[patrick246]]></dc:creator><pubDate>Thu, 01 Oct 2015 09:53:25 GMT</pubDate></item><item><title><![CDATA[Reply to C++ ist machmal echt seltsam on Thu, 01 Oct 2015 10:05:38 GMT]]></title><description><![CDATA[<p>Ich hatte bisher immer unbewusst angenommen, dass man mit dem + Operator Strings zusammenfügen kann und das auch mit char* geht, solange der Operand, der am weitesten links ist, ein String ist. Problem mit der Regel ist hier das += mit der veränderten Auswerungsreihenfolge. OK, hätte man drauf kommen können.</p>
<p>Für C-Programmierer ist es sicherlich nicht verwunderlich, dass man mit</p>
<pre><code>&quot;ABC&quot; + 'c';
</code></pre>
<p>keine C-Strings aneinanderhängen kann. Das wäre mir auch klar. Aber das beide Operanden implizit zu etwas semantisch völlig anderen werden, für die der Operator+ eine völlig andere Bedeutung hat, ist wohl für Benutzer jeder anderen Programmiersprache recht seltsam.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2469498</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2469498</guid><dc:creator><![CDATA[TNA]]></dc:creator><pubDate>Thu, 01 Oct 2015 10:05:38 GMT</pubDate></item><item><title><![CDATA[Reply to C++ ist machmal echt seltsam on Thu, 01 Oct 2015 10:12:52 GMT]]></title><description><![CDATA[<p>was hat das jetzt mit C++ zu tun - das ist doch in C genauso</p>
<pre><code>int main() { 
  const char* x = &quot;ABCDEFGHIJKLMNOPQRSTUVWXYZ&quot; + '\n';
  const char* y = &amp;&quot;ABCDEFGHIJKLMNOPQRSTUVWXYZ&quot;['\n']; 
  const char* z = &quot;ABCDEFGHIJKLMNOPQRSTUVWXYZ&quot; &quot;123&quot;; 
  return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2469499</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2469499</guid><dc:creator><![CDATA[Gast3]]></dc:creator><pubDate>Thu, 01 Oct 2015 10:12:52 GMT</pubDate></item><item><title><![CDATA[Reply to C++ ist machmal echt seltsam on Thu, 01 Oct 2015 10:20:33 GMT]]></title><description><![CDATA[<p>da steht doch nicht anderes als</p>
<pre><code>std::string x = std::string(&quot;ABCDEFGHIJKLMNOPQRSTUVWXYZ&quot; + '\n');
</code></pre>
<p>dein Gefühl war</p>
<pre><code>std::string x = std::string(&quot;ABCDEFGHIJKLMNOPQRSTUVWXYZ&quot;) + '\n';
</code></pre>
<p>aber wer soll den entscheiden das dein &quot;ABC...&quot;-String erst in einen std::string konvertiert werden muss, x kann es nicht</p>
<p>aber ich geben dir recht das es leicht zu Fehlern führt - und man denkt zu schnell das da alles automatisch konvertiert wird</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2469500</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2469500</guid><dc:creator><![CDATA[Gast3]]></dc:creator><pubDate>Thu, 01 Oct 2015 10:20:33 GMT</pubDate></item><item><title><![CDATA[Reply to C++ ist machmal echt seltsam on Thu, 01 Oct 2015 10:30:34 GMT]]></title><description><![CDATA[<p>Gast3 schrieb:</p>
<blockquote>
<p>was hat das jetzt mit C++ zu tun - das ist doch in C genauso</p>
</blockquote>
<p>Das ist ja gerade eine &quot;C-Altlast&quot; in C++. Menschen die in C viel mit C-Strings hantieren erwarten so etwas auch. Menschen die in der Regel ideomatisches C++ schreiben oder andere Hochsprachen, dass ein deutlich höheres Abstraktionslevel hat, erwarten eher nicht, dass bei so etwas plötzlich auf Low-Level-Verhalten umgeschaltet wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2469501</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2469501</guid><dc:creator><![CDATA[TNA]]></dc:creator><pubDate>Thu, 01 Oct 2015 10:30:34 GMT</pubDate></item><item><title><![CDATA[Reply to C++ ist machmal echt seltsam on Thu, 01 Oct 2015 10:37:54 GMT]]></title><description><![CDATA[<p>die beiden sind schon ganz schön böse</p>
<p>Array == Pointer<br />
&quot;xyz&quot; == Pointer</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2469502</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2469502</guid><dc:creator><![CDATA[Gast3]]></dc:creator><pubDate>Thu, 01 Oct 2015 10:37:54 GMT</pubDate></item><item><title><![CDATA[Reply to C++ ist machmal echt seltsam on Thu, 01 Oct 2015 10:48:20 GMT]]></title><description><![CDATA[<p>Gast3 schrieb:</p>
<blockquote>
<p>aber wer soll den entscheiden das dein &quot;ABC...&quot;-String erst in einen std::string konvertiert werden muss, x kann es nicht</p>
</blockquote>
<p>Natürlich ist es technisch nicht möglich, das so zu realisieren. Um das zu wissen braucht man aber schon recht genaues Detailwissen darüber, wie das ausgewertet wird.</p>
<p>Gast3 schrieb:</p>
<blockquote>
<p>aber ich geben dir recht das es leicht zu Fehlern führt - und man denkt zu schnell das da alles automatisch konvertiert wird</p>
</blockquote>
<p>Das nicht alles automatisch konvertiert wird ist das eine, das hat man ja hin und wieder schon mal, das andere ist aber, dass es trotzdem kompiliert.</p>
<p>Wenn man z.B. schreibt</p>
<pre><code>string x =&quot;ABC&quot; + &quot;DEF&quot;
</code></pre>
<p>;<br />
Bekommt man zumindest einen Fehler. Das Problem hier ist, das C++ an dieser Stelle die schwache Typisierung von C geerbt hat, die es erlaubt, das Typen implizit in andere Typen mit völlig unterschiedlicher Semantik umgewandelt werden. Das kann hoch gefährlich sein. Daran lässt sich aber wohl nichts mehr ändern. Vielen C-Altlasten kann man gut aus dem weg gehen indem man sie einfach nicht benutzt. An der Doppelbedeutung von char* und char sowie dem Pointer-Decay kommt aber niemand drum rum.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2469504</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2469504</guid><dc:creator><![CDATA[TNA]]></dc:creator><pubDate>Thu, 01 Oct 2015 10:48:20 GMT</pubDate></item><item><title><![CDATA[Reply to C++ ist machmal echt seltsam on Thu, 01 Oct 2015 10:53:51 GMT]]></title><description><![CDATA[<p>Man könnte eventuell auch argumentieren, dass die Operator+ Überladung für std::string ein Fehler war, da sie diesem Operator kontextabhängig eine unterschiedliche Bedeutung gibt. Ein noch größerer Fehler war es wahrscheinlich, diesen Operator auch noch gemischt für char* und char zu überladen, was fälschlicherweise suggeriert man könne std::strings mit C-Strings und Literalkonstanten in solchen Ausdrücken beliebig mischen..</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2469507</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2469507</guid><dc:creator><![CDATA[TNA]]></dc:creator><pubDate>Thu, 01 Oct 2015 10:53:51 GMT</pubDate></item><item><title><![CDATA[Reply to C++ ist machmal echt seltsam on Thu, 01 Oct 2015 11:02:31 GMT]]></title><description><![CDATA[<p>Gerade Bjarne Stroustrup will ja gerne den Eindruck erwecken, man könne insbesondere seit C++14 aus C++ eine konsistente, sichere und dennoch vergleichsweise einfach zu erlernende Sprache machen, indem man nur noch eine ideomatische Teilmenge der Sprache lehrt, weil die ganzen unsicheren und fehleranfälligen Low-Level Sachen bräuchten ja eh nur die Library-Implementierer zu verstehen. Ich fürchte jedoch das ist unmöglich, gerade wegen solchen Dingen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2469509</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2469509</guid><dc:creator><![CDATA[TNA]]></dc:creator><pubDate>Thu, 01 Oct 2015 11:02:31 GMT</pubDate></item><item><title><![CDATA[Reply to C++ ist machmal echt seltsam on Thu, 01 Oct 2015 11:08:35 GMT]]></title><description><![CDATA[<p>TNA schrieb:</p>
<blockquote>
<p>kompiliert ohne Warnung, passiert alle statischen Codanalys Tests</p>
</blockquote>
<p>Clang gibt tatsächlich eine nette Warnung:</p>
<pre><code>test.cpp:7:42: warning: adding 'char' to a string pointer does not append to the string [-Wstring-plus-char]
  result += &quot;ABCDEFGHIJKLMNOPQRSTUVWXYZ&quot; + '\n';
            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~
test.cpp:7:42: note: use array indexing to silence this warning
  result += &quot;ABCDEFGHIJKLMNOPQRSTUVWXYZ&quot; + '\n';
                                         ^
            &amp;                            [     ]
</code></pre>
<p>Die Lösung für dieses Problem wäre in C++14 wohl so (Man beachte das 's' Suffix):</p>
<pre><code>&quot;ABCDEFGHIJKLMNOPQRSTUVWXYZ&quot;s + '\n';
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2469511</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2469511</guid><dc:creator><![CDATA[sebi707]]></dc:creator><pubDate>Thu, 01 Oct 2015 11:08:35 GMT</pubDate></item><item><title><![CDATA[Reply to C++ ist machmal echt seltsam on Thu, 01 Oct 2015 11:31:51 GMT]]></title><description><![CDATA[<p>Was macht das s Suffix, Stichwort ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2469514</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2469514</guid><dc:creator><![CDATA[c14_new]]></dc:creator><pubDate>Thu, 01 Oct 2015 11:31:51 GMT</pubDate></item><item><title><![CDATA[Reply to C++ ist machmal echt seltsam on Thu, 01 Oct 2015 11:36:46 GMT]]></title><description><![CDATA[<p>c14_new schrieb:</p>
<blockquote>
<p>Was macht das s Suffix, Stichwort ?</p>
</blockquote>
<p>Es konvertiert den Ausdruck in einen std::string.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2469516</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2469516</guid><dc:creator><![CDATA[TNA]]></dc:creator><pubDate>Thu, 01 Oct 2015 11:36:46 GMT</pubDate></item><item><title><![CDATA[Reply to C++ ist machmal echt seltsam on Thu, 01 Oct 2015 11:53:40 GMT]]></title><description><![CDATA[<p>sebi707 schrieb:</p>
<blockquote>
<p>Clang gibt tatsächlich eine nette Warnung:</p>
</blockquote>
<p>Das ist ne tolle Sache. GCC macht das leider nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2469519</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2469519</guid><dc:creator><![CDATA[TNA]]></dc:creator><pubDate>Thu, 01 Oct 2015 11:53:40 GMT</pubDate></item><item><title><![CDATA[Reply to C++ ist machmal echt seltsam on Thu, 01 Oct 2015 17:12:43 GMT]]></title><description><![CDATA[<p>TNA schrieb:</p>
<blockquote>
<p>Trotz mittlerweile doch recht langer Erfahrung stolpere ich…</p>
</blockquote>
<p>Danke. Den Code kriegen gleich mal die nächsten Bewerber zu sehen. <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/2469548</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2469548</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Thu, 01 Oct 2015 17:12:43 GMT</pubDate></item><item><title><![CDATA[Reply to C++ ist machmal echt seltsam on Thu, 01 Oct 2015 23:55:13 GMT]]></title><description><![CDATA[<p>TNA schrieb:</p>
<blockquote>
<p>Gerade Bjarne Stroustrup will ja gerne den Eindruck erwecken, man könne insbesondere seit C++14 aus C++ eine konsistente, sichere und dennoch vergleichsweise einfach zu erlernende Sprache machen, indem man nur noch eine ideomatische Teilmenge der Sprache lehrt, weil die ganzen unsicheren und fehleranfälligen Low-Level Sachen bräuchten ja eh nur die Library-Implementierer zu verstehen. Ich fürchte jedoch das ist unmöglich, gerade wegen solchen Dingen.</p>
</blockquote>
<p>In diese Richtung wurde in der letzten auch ganz gute Arbeit gemacht.<br />
Allerdings kollidiert der Anspruch der &quot;einfachen Sprache&quot; wie im vorliegenden Fall oft mit dem gleichzitigen Anspruch, dass sich 20 Jahre alter Code immer noch mit aktuellen Compilern bauen lassen soll.</p>
<p>Ich würde es auch als intuitiver empfinden, wenn <code>&quot;abc&quot;</code> von Haus aus ein String-Literal wäre, anstatt eine Aneinanderreihung von Bytes irgendwo im Speicher.<br />
In einer modernen Sprache sollte ersteres der Standardfall sein (ist auch sicherlich das, was man in neuem Code am häufigsten braucht) und letzteres der &quot;Sonderfall&quot;,<br />
für den man dann eine etwas andere Syntax verwendet. Was das jedoch alles an altem Code kaputt machen würde, kannst du dir sicher selbst ausmalen <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 />
... von den ganzen &quot;String&quot;-Klassen, die man neben <code>std::string</code> sonst noch so in freier Wildbahn antrifft, will ich erst gar nicht anfangen.</p>
<p>Vielleicht ringt man sich ja mal dazu durch die &quot;einfachere Sprache&quot; per Compiler-Flag aktivierbar zu machen (so wie man es bei vielen Compilern schon für c++11 machen muss).<br />
<code>&quot;abc&quot;</code> wäre dann automatisch ein <code>std::string</code> -Literal, und wenn man einen <code>const char*</code> haben will, muss man es anders schreiben.<br />
Oder ein <code>char</code> wäre ein &quot;Zeichen&quot;, das man nicht einfach so wie z.B. einen <code>(u)int8_t</code> auf einen Pointer aufaddieren kann.</p>
<p>Finnegan</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2469569</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2469569</guid><dc:creator><![CDATA[Finnegan]]></dc:creator><pubDate>Thu, 01 Oct 2015 23:55:13 GMT</pubDate></item><item><title><![CDATA[Reply to C++ ist machmal echt seltsam on Fri, 02 Oct 2015 01:32:25 GMT]]></title><description><![CDATA[<p>Finnegan schrieb:</p>
<blockquote>
<p>Vielleicht ringt man sich ja mal dazu durch die &quot;einfachere Sprache&quot; per Compiler-Flag aktivierbar zu machen (so wie man es bei vielen Compilern schon für c++11 machen muss).<br />
<code>&quot;abc&quot;</code> wäre dann automatisch ein <code>std::string</code> -Literal, und wenn man einen <code>const char*</code> haben will, muss man es anders schreiben.<br />
Oder ein <code>char</code> wäre ein &quot;Zeichen&quot;, das man nicht einfach so wie z.B. einen <code>(u)int8_t</code> auf einen Pointer aufaddieren kann.</p>
</blockquote>
<p>Diese Idee finde ich gefährlich. Erinnert mich an Python 2 und 3 Chaos.<br />
Nein ich finde sie sogar furchtbar.</p>
<p>EDIT: Außer vielleicht mit Makros an und abstellbar, aber selbst dann stiftet das eher mehr chaos.</p>
<p>EDIT 2: Wenn ich schon ein Beitrag in diesem Thread habe lasse ich nochmal das hier liegen:</p>
<pre><code>char c = '\n'[&quot;ABCDEFGHIJKLMNOP&quot;];
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2469571</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2469571</guid><dc:creator><![CDATA[5cript]]></dc:creator><pubDate>Fri, 02 Oct 2015 01:32:25 GMT</pubDate></item><item><title><![CDATA[Reply to C++ ist machmal echt seltsam on Fri, 02 Oct 2015 04:33:03 GMT]]></title><description><![CDATA[<pre><code>char c = '\n'[&quot;ZuKurz&quot;];
!!warning: array index 10 is past the end of the array (which contains 7 elements) [-Warray-bounds]
</code></pre>
<p>wenigstens kann der clang in manchen Situation was komisches erkennen</p>
<p>'\n' verhält sich hier irgendwie wie ein array aber auch wie ein Wert - oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2469578</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2469578</guid><dc:creator><![CDATA[Gast3]]></dc:creator><pubDate>Fri, 02 Oct 2015 04:33:03 GMT</pubDate></item><item><title><![CDATA[Reply to C++ ist machmal echt seltsam on Fri, 02 Oct 2015 05:38:33 GMT]]></title><description><![CDATA[<p>Finnegan schrieb:</p>
<blockquote>
<p>Ich würde es auch als intuitiver empfinden, wenn <code>&quot;abc&quot;</code> von Haus aus ein String-Literal wäre, anstatt eine Aneinanderreihung von Bytes irgendwo im Speicher.<br />
In einer modernen Sprache sollte ersteres der Standardfall sein (ist auch sicherlich das, was man in neuem Code am häufigsten braucht) und letzteres der &quot;Sonderfall&quot;,</p>
</blockquote>
<p>Das ist Java-Denke und macht die Sache NICHT einfacher, sondern komplizierter.<br />
&quot;abc&quot; sollte ein char[3] sein und array-to-pointer sollte nicht automagisch konvertiert werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2469583</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2469583</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Fri, 02 Oct 2015 05:38:33 GMT</pubDate></item><item><title><![CDATA[Reply to C++ ist machmal echt seltsam on Fri, 02 Oct 2015 06:05:15 GMT]]></title><description><![CDATA[<p>Gast3 schrieb:</p>
<blockquote>
<pre><code>char c = '\n'[&quot;ZuKurz&quot;];
!!warning: array index 10 is past the end of the array (which contains 7 elements) [-Warray-bounds]
</code></pre>
<p>wenigstens kann der clang in manchen Situation was komisches erkennen</p>
<p>'\n' verhält sich hier irgendwie wie ein array aber auch wie ein Wert - oder?</p>
</blockquote>
<p><code>a[b]</code> für den eingebauten Operator [] ist das gleiche wie <code>*(a + b)</code> . Da Addition eines Wertes zu einem Zeiger kommutativ ist, ist es egal, ob a oder b der Zeiger bzw. der Index ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2469585</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2469585</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Fri, 02 Oct 2015 06:05:15 GMT</pubDate></item><item><title><![CDATA[Reply to C++ ist machmal echt seltsam on Fri, 02 Oct 2015 07:23:22 GMT]]></title><description><![CDATA[<p>hatte mich im Test blöd verschrieben - die Fehlermeldung schnell überlesen und gedacht das es für Char-Literale ein Spezialfall wäre (Oh Gott!) - ist aber zum Glück nicht so - Puh!</p>
<pre><code>char x = 10[&quot;0123456789&quot;];
</code></pre>
<p>also kannst du meine Frage einfach dauerhaft aus deinem Gedächtnis löschen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2469597</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2469597</guid><dc:creator><![CDATA[Gast3]]></dc:creator><pubDate>Fri, 02 Oct 2015 07:23:22 GMT</pubDate></item><item><title><![CDATA[Reply to C++ ist machmal echt seltsam on Sat, 03 Oct 2015 11:07:55 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>Finnegan schrieb:</p>
<blockquote>
<p>Ich würde es auch als intuitiver empfinden, wenn <code>&quot;abc&quot;</code> von Haus aus ein String-Literal wäre, anstatt eine Aneinanderreihung von Bytes irgendwo im Speicher.<br />
In einer modernen Sprache sollte ersteres der Standardfall sein (ist auch sicherlich das, was man in neuem Code am häufigsten braucht) und letzteres der &quot;Sonderfall&quot;,</p>
</blockquote>
<p>Das ist Java-Denke und macht die Sache NICHT einfacher, sondern komplizierter.<br />
&quot;abc&quot; sollte ein char[3] sein und array-to-pointer sollte nicht automagisch konvertiert werden.</p>
</blockquote>
<p>Ich lasse mich ja gerne von Argumenten überzeugen, aber so kann ich genau so gut behaupten, dass das &quot;C-Denke&quot; ist.<br />
Ich habe mich nicht für igendwelche &quot;automagischen&quot; Konvertierungen ausgesprochen, sondern lediglich angeregt, dass in einem vereinfachten C++<br />
der Ausdruck <code>&quot;abc&quot;</code> ein String-Literal sein könnte, also implizit ein <code>&quot;abc&quot;s</code> .<br />
Einen <code>char</code> -Array kann ich so immer noch als <code>const char[] a = { 'a', 'b', 'c' }</code> definieren, wenn man es denn benötigt. Genau wie jedes andere Array auch.</p>
<p>Gut möglich, dass das vielleicht einige Dinge komplizierter macht, ich habe das nicht bis ins letzte Detail durchdacht, trotzdem würde ich dafür gerne ein paar Argumente hören.<br />
Eine Sache, die mir da einfallen würde ist, dass ein String im Gegensatz zu einem <code>char</code> -Array in C++ kein &quot;1st Class Citizen&quot; (builtin) ist, sondern lediglich eine Klasse in einer Bibliothek (wenn auch der Standardbibliothek).<br />
Das ganze wäre sicherlich etwas konsistenter, wenn <code>string</code> ein builtin-Typ wäre (nicht so ganz blasphemisch, wenn man bedenkt, dass z.B. C99 mit komplexen Zahlen auch einen de facto zusammengesetzten Datentypen als builtin anbietet).</p>
<p>Finnegan</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2469690</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2469690</guid><dc:creator><![CDATA[Finnegan]]></dc:creator><pubDate>Sat, 03 Oct 2015 11:07:55 GMT</pubDate></item><item><title><![CDATA[Reply to C++ ist machmal echt seltsam on Sat, 03 Oct 2015 13:10:48 GMT]]></title><description><![CDATA[<p>Ich denke es ist etwas anderes std::string als builtin hinzuzufügen als komplexe Zahlen, bei denen braucht man ja nur einen Real- und Imaginärteil. std::string benutzt den Standard-Allocator und deswegen auch new. Diese müssten dann auch builtin sein, oder wie soll der std::string seinen Speicher bekommen? Im Freestanding Environment wird das zu einem Problem.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2469695</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2469695</guid><dc:creator><![CDATA[patrick246]]></dc:creator><pubDate>Sat, 03 Oct 2015 13:10:48 GMT</pubDate></item><item><title><![CDATA[Reply to C++ ist machmal echt seltsam on Sun, 04 Oct 2015 07:50:16 GMT]]></title><description><![CDATA[<p>patrick246 schrieb:</p>
<blockquote>
<p>Ich denke es ist etwas anderes std::string als builtin hinzuzufügen als komplexe Zahlen, bei denen braucht man ja nur einen Real- und Imaginärteil. std::string benutzt den Standard-Allocator und deswegen auch new. Diese müssten dann auch builtin sein, oder wie soll der std::string seinen Speicher bekommen? Im Freestanding Environment wird das zu einem Problem.</p>
</blockquote>
<p>Ich denke man kann durchaus eine String-Klasse implementieren, die im Falle eines Freestanding Environment den benötigten Speicher auf dem Stack reserviert<br />
(selbst für dynamische Strings, z.B. über verkettete Stack-Speicherbereiche), das sollte also nicht unbedingt ein Showstopper sein.</p>
<p>Dieser Argumentationspfad führt allerdings in eine andere Richtung (macht ein builtin-String Sinn?). Mein Argument war jedoch lediglich, dass wenn <code>&quot;abc&quot;</code> ein String-Literal ist,<br />
es eine &quot;rundere&quot; Sache wäre, wenn der String ein builtin ist. Schließlich ist das <code>&quot;abc&quot;</code> -Literal ein Sprachfeature, für das man keinerlei Bibliotheken (nichtmal die Std) benötigt.<br />
Machbar wäre ein builtin-String schon, aber es widerspricht wahrscheinlich der Philosophie des Standardkommitees, die Kernsprache möglichst schlank zu halten.<br />
Daher ist der nicht-existente builtin-string eher ein Argument dafür <code>&quot;abc&quot;</code> eben weiterhin als char-Array zu interpretieren, da dieses allein durch Elemente der Kernsprache dargestellt werden kann.</p>
<p>Trotzdem empfinde ich <code>(&quot;Hallo&quot; + &quot;Welt&quot;).length()</code> (ohne s-Suffix) durchaus als intuitiv und würde es in der &quot;einfacheren Sprache&quot;, die irgendwann mal aus C++ herausgeschält wird, durchaus begrüßen.<br />
... auch wenn hier einige schon die Holzpflöcke spitzen und den Knoblauch holen <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>
<p>Finnegan</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2469740</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2469740</guid><dc:creator><![CDATA[Finnegan]]></dc:creator><pubDate>Sun, 04 Oct 2015 07:50:16 GMT</pubDate></item><item><title><![CDATA[Reply to C++ ist machmal echt seltsam on Tue, 06 Oct 2015 17:39:12 GMT]]></title><description><![CDATA[<p>Finnegan schrieb:</p>
<blockquote>
<p>Daher ist der nicht-existente builtin-string eher ein Argument dafür <code>&quot;abc&quot;</code> eben weiterhin als char-Array zu interpretieren, da dieses allein durch Elemente der Kernsprache dargestellt werden kann.</p>
</blockquote>
<p>Aber eigentlich ist das ja eh nicht für alle Features gegeben. Ein</p>
<pre><code>for (int i : my_int_array);
</code></pre>
<p>vermischt ja auch irgendwie Kernsprache mit std lib, als macht so eine Trennung doch eigentlich nicht viel Sinn oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2470095</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2470095</guid><dc:creator><![CDATA[happystudent]]></dc:creator><pubDate>Tue, 06 Oct 2015 17:39:12 GMT</pubDate></item></channel></rss>