<?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[Defined Behavior]]></title><description><![CDATA[<p>Ist das hier UB oder nicht?</p>
<pre><code class="language-cpp">int a[3][3];
a[0][6] = 9;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/318617/defined-behavior</link><generator>RSS for Node</generator><lastBuildDate>Mon, 27 Jul 2026 05:37:09 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/318617.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 19 Jul 2013 16:42:19 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Defined Behavior on Fri, 19 Jul 2013 16:42:19 GMT]]></title><description><![CDATA[<p>Ist das hier UB oder nicht?</p>
<pre><code class="language-cpp">int a[3][3];
a[0][6] = 9;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2339973</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2339973</guid><dc:creator><![CDATA[Definor]]></dc:creator><pubDate>Fri, 19 Jul 2013 16:42:19 GMT</pubDate></item><item><title><![CDATA[Reply to Defined Behavior on Fri, 19 Jul 2013 17:10:53 GMT]]></title><description><![CDATA[<p>'a' ist eine (in diesem Fall) lückenlose Reihe von 9 ints. (row-major-order)<br />
Da das subscripting im Standard mit einfacher Zeigerarithmetik erklärt wird und Du im Endergebnis auf a[6] zugreifst scheint mir das kein Problem.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2339976</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2339976</guid><dc:creator><![CDATA[Furble Wurble]]></dc:creator><pubDate>Fri, 19 Jul 2013 17:10:53 GMT</pubDate></item><item><title><![CDATA[Reply to Defined Behavior on Fri, 19 Jul 2013 18:19:20 GMT]]></title><description><![CDATA[<p>Edit: Blök.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2339988</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2339988</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Fri, 19 Jul 2013 18:19:20 GMT</pubDate></item><item><title><![CDATA[Reply to Defined Behavior on Fri, 19 Jul 2013 19:08:03 GMT]]></title><description><![CDATA[<p>Hmm, ich weiß nicht ... das könnte so ein Fall von &quot;undefiniert aber funktioniert überall&quot; sein. Bin aber gerade zu faul, nachzugucken.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2339995</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2339995</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Fri, 19 Jul 2013 19:08:03 GMT</pubDate></item><item><title><![CDATA[Reply to Defined Behavior on Fri, 19 Jul 2013 20:21:50 GMT]]></title><description><![CDATA[<p>Ich denke das dürfte definiert sein. Definiert ist ja in jedem Fall, dass der Speicherbreich der Arrays zusammenhängend ist. Daraus folgt, dass auch das hier definiert ist:</p>
<pre><code>int a[3][3];
int* p = a[0];
p[6] = 9;
</code></pre>
<p>Und wenn das definiert ist, sollte auch der Beispielcode okay sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2339999</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2339999</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Fri, 19 Jul 2013 20:21:50 GMT</pubDate></item><item><title><![CDATA[Reply to Defined Behavior on Fri, 19 Jul 2013 22:06:33 GMT]]></title><description><![CDATA[<p>Ist das dann trotzdem nicht eher ein &quot;no go&quot;?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2340013</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2340013</guid><dc:creator><![CDATA[5cript]]></dc:creator><pubDate>Fri, 19 Jul 2013 22:06:33 GMT</pubDate></item><item><title><![CDATA[Reply to Defined Behavior on Fri, 19 Jul 2013 22:31:11 GMT]]></title><description><![CDATA[<p>Das ist durchaus definiert, und man kann damit lustige Späße treiben. So ist</p>
<pre><code class="language-cpp">foo[1][-1];
</code></pre>
<p>das letzte Element von foo[0]. Aber das ist noch harmlos:</p>
<pre><code class="language-cpp">-1[1[foo&rsqb;&rsqb;
</code></pre>
<p>macht das selbe.</p>
<p>foo[bar] ist definiert als (<em>(foo + bar)). foo[bar][baz] ist dementsprechend (</em>(*(foo + bar) + baz)). Was mit dem einen geht, geht auch mit dem anderen.</p>
<p>Das sind allerdings Dinge, die man nur mit gutem Grund und gut kommentiert benutzen sollte. Und <strong>selten</strong>.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2340015</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2340015</guid><dc:creator><![CDATA[seldon]]></dc:creator><pubDate>Fri, 19 Jul 2013 22:31:11 GMT</pubDate></item><item><title><![CDATA[Reply to Defined Behavior on Fri, 19 Jul 2013 22:53:19 GMT]]></title><description><![CDATA[<p>seldon schrieb:</p>
<blockquote>
<pre><code class="language-cpp">-1[1[foo&rsqb;&rsqb;
</code></pre>
</blockquote>
<p>Ist das nicht das gleiche wie <code>-(1[1[foo&rsqb;&rsqb;)</code> ? Du meinst vermutlich <code>(-1)[1[foo&rsqb;&rsqb;</code> .</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2340018</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2340018</guid><dc:creator><![CDATA[TyRoXx]]></dc:creator><pubDate>Fri, 19 Jul 2013 22:53:19 GMT</pubDate></item><item><title><![CDATA[Reply to Defined Behavior on Fri, 19 Jul 2013 23:24:45 GMT]]></title><description><![CDATA[<p>Ah. Richtig, mein Fehler.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2340019</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2340019</guid><dc:creator><![CDATA[seldon]]></dc:creator><pubDate>Fri, 19 Jul 2013 23:24:45 GMT</pubDate></item><item><title><![CDATA[Reply to Defined Behavior on Sat, 20 Jul 2013 10:21:55 GMT]]></title><description><![CDATA[<p>Tim06TR schrieb:</p>
<blockquote>
<p>Ist das dann trotzdem nicht eher ein &quot;no go&quot;?</p>
</blockquote>
<p>Ja, das ist es. Wieso? Weil es keinen Sinn macht, statt <code>a[1][2] a[0][6]</code> bzw. <code>a[6]</code> zu schreiben. Entweder man möchte direkt ein eindimensionales Array, oder das würde ich als Bug einstufen weil die Indexe eben nicht zu den Array-Bounds passen (völlig unabhängig davon, ob das jetzt tatsächlich definiertes oder undefiniertes Verhalten ist, oder ob dieser Ausdruck damit auf ein Feldelement verweist). Das funktioniert so natürlich auch nur bei echten multidimensionalen Arrays...</p>
<p>@seldon: Ja, der Operator ist (wie der Standard so schön sagt) neben seiner unsymmetrischen Syntax dennoch kommutativ. Trotzdem gibt es AFAIK keinen einzigen Grund, das auszunutzen... Also wieso selten und nicht nie, welchen guten Grund kann es da denn geben*?</p>
<p>*Überladene Index-Operatoren sind hiervon ja ausgeschlossen, es geht lediglich um echte Arrays.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2340042</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2340042</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Sat, 20 Jul 2013 10:21:55 GMT</pubDate></item><item><title><![CDATA[Reply to Defined Behavior on Sat, 20 Jul 2013 18:48:24 GMT]]></title><description><![CDATA[<p>Nun ja,</p>
<pre><code class="language-cpp">void foo(int *matrix, size_t x, size_t y) {
  ...
}

...

int m[3][3] = { { 1, 2, 3 },
                { 4, 5, 6 },
                { 7, 8, 9 } };

foo(m[0], 3, 3);
</code></pre>
<p>zum Beispiel. wobei man das eher in C- als in C++-Code haben will.</p>
<p>(Geht übrigens auch umgekehrt)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2340094</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2340094</guid><dc:creator><![CDATA[seldon]]></dc:creator><pubDate>Sat, 20 Jul 2013 18:48:24 GMT</pubDate></item></channel></rss>