<?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[Wie hieß denn noch der Datentyp ?]]></title><description><![CDATA[<p>Ich bin grade verzweifelt auf der Suche nach dem einen ADT von dem ich mal etwas hörte aber seinen Namen vergessen habe.<br />
Der Datentyp kann zum Beispiel 2 Variablen unterschiedlichen Typs halten , man hat aber immer nur Zugriff auf den zuletzt gesetzen.<br />
Und der Datentyp ist im Speicher immer so groß wie sein größtes Element.<br />
Wie hieß das Schlüsselwort noch ? Mir will es einfach nicht einfallen :).</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/287006/wie-hieß-denn-noch-der-datentyp</link><generator>RSS for Node</generator><lastBuildDate>Thu, 20 Aug 2026 17:17:25 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/287006.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 20 May 2011 08:28:41 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Wie hieß denn noch der Datentyp ? on Fri, 20 May 2011 08:28:41 GMT]]></title><description><![CDATA[<p>Ich bin grade verzweifelt auf der Suche nach dem einen ADT von dem ich mal etwas hörte aber seinen Namen vergessen habe.<br />
Der Datentyp kann zum Beispiel 2 Variablen unterschiedlichen Typs halten , man hat aber immer nur Zugriff auf den zuletzt gesetzen.<br />
Und der Datentyp ist im Speicher immer so groß wie sein größtes Element.<br />
Wie hieß das Schlüsselwort noch ? Mir will es einfach nicht einfallen :).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2066201</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2066201</guid><dc:creator><![CDATA[Bacid90210]]></dc:creator><pubDate>Fri, 20 May 2011 08:28:41 GMT</pubDate></item><item><title><![CDATA[Reply to Wie hieß denn noch der Datentyp ? on Fri, 20 May 2011 08:29:25 GMT]]></title><description><![CDATA[<p>Bacid90210 schrieb:</p>
<blockquote>
<p>Ich bin grade verzweifelt auf der Suche nach dem einen ADT von dem ich mal etwas hörte aber seinen Namen vergessen habe.<br />
Der Datentyp kann zum Beispiel 2 Variablen unterschiedlichen Typs halten , man hat aber immer nur Zugriff auf den zuletzt gesetzen.<br />
Und der Datentyp ist im Speicher immer so groß wie sein größtes Element.<br />
Wie hieß das Schlüsselwort noch ? Mir will es einfach nicht einfallen :).</p>
</blockquote>
<p>Ich schätze mal, dass Du eine union meinst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2066202</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2066202</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Fri, 20 May 2011 08:29:25 GMT</pubDate></item><item><title><![CDATA[Reply to Wie hieß denn noch der Datentyp ? on Fri, 20 May 2011 08:32:21 GMT]]></title><description><![CDATA[<p>Ach danke , genau .<br />
es wollte mir einfach nicht einfallen .<br />
Debrain vom feinsten.</p>
<p>thx</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2066203</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2066203</guid><dc:creator><![CDATA[Bacid90210]]></dc:creator><pubDate>Fri, 20 May 2011 08:32:21 GMT</pubDate></item><item><title><![CDATA[Reply to Wie hieß denn noch der Datentyp ? on Fri, 20 May 2011 08:35:25 GMT]]></title><description><![CDATA[<p>Und hier noch der obligatorische Hinweis: Benutz keine Unions. Sie sind böse.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2066205</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2066205</guid><dc:creator><![CDATA[Michael E.]]></dc:creator><pubDate>Fri, 20 May 2011 08:35:25 GMT</pubDate></item><item><title><![CDATA[Reply to Wie hieß denn noch der Datentyp ? on Fri, 20 May 2011 08:44:00 GMT]]></title><description><![CDATA[<p>wieso?<br />
wenn man weiss, was man macht, ist das doch ok?!?</p>
<p>wie würdest du denn sonst zum beispiel eine 4x4 matrix darstellen?</p>
<pre><code class="language-cpp">union Matrix 
{
    float mat[4][4];
    struct m
    {
         float _11, _12, _13, _14;
         float _21, _22, _23, _24;
         float _31, _32, _33, _34;
         float _41, _42, _43, _44;
    };
};
</code></pre>
<p>so kann man per array index zugreifen oder halt per variablen ansprache...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2066211</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2066211</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Fri, 20 May 2011 08:44:00 GMT</pubDate></item><item><title><![CDATA[Reply to Wie hieß denn noch der Datentyp ? on Fri, 20 May 2011 09:04:09 GMT]]></title><description><![CDATA[<p>Skym0sh0 schrieb:</p>
<blockquote>
<p>so kann man per array index zugreifen oder halt per variablen ansprache...</p>
</blockquote>
<p>Kablämm! Wunderbares Beispiel wo es leicht krachen könnte. Die Packung von Einzelvariablen muss nicht zwangsläufig die gleiche sein wie bei einem Array.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2066220</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2066220</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Fri, 20 May 2011 09:04:09 GMT</pubDate></item><item><title><![CDATA[Reply to Wie hieß denn noch der Datentyp ? on Fri, 20 May 2011 09:12:10 GMT]]></title><description><![CDATA[<p>Skym0sh0 schrieb:</p>
<blockquote>
<p>wieso?<br />
wenn man weiss, was man macht, ist das doch ok?!?</p>
</blockquote>
<p>Das sagen sie alle. Und irgendwann versteht man die Welt nicht mehr.</p>
<blockquote>
<pre><code class="language-cpp">union Matrix 
{
    float mat[4][4];
    struct m
    {
         float _11, _12, _13, _14;
         float _21, _22, _23, _24;
         float _31, _32, _33, _34;
         float _41, _42, _43, _44;
    };
};
</code></pre>
<p>so kann man per array index zugreifen oder halt per variablen ansprache...</p>
</blockquote>
<p>Mal ganz davon abgesehen, dass ich das nicht möchte und auch überhaupt keinen Sinn darin sehe, das über Variablennamen zu machen, ist das, was du vorhast, bereits undefiniertes Verhalten.</p>
<p>Edit: Als Ergänzung zu SeppJ: Selbst wenn garantiert wäre, dass das Padding gleich ist, wäre es trotzdem nicht legal, über m auf mat zuzugreifen. Das gäb bestimmt noch lustige Effekte, wenn der Compiler zu aggressiv optimiert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2066222</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2066222</guid><dc:creator><![CDATA[Michael E.]]></dc:creator><pubDate>Fri, 20 May 2011 09:12:10 GMT</pubDate></item><item><title><![CDATA[Reply to Wie hieß denn noch der Datentyp ? on Fri, 20 May 2011 09:12:20 GMT]]></title><description><![CDATA[<p>Wie du selbst schon sagtest ist der Zugriff nur auf das zuletzt gesetzte Element definiert. Du kannst also nicht erst einen float-Member setzen und dann auf das Array zugreifen.</p>
<p>Besser in diesem Fall wäre eine kleine Klasse mit ein paar inline-Gettern, z.B.:</p>
<pre><code class="language-cpp">struct Matrix
{
    float data[4][4];

    float&amp; _11() { return data[0][0]; }
    // ...
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2066224</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2066224</guid><dc:creator><![CDATA[ipsec]]></dc:creator><pubDate>Fri, 20 May 2011 09:12:20 GMT</pubDate></item><item><title><![CDATA[Reply to Wie hieß denn noch der Datentyp ? on Fri, 20 May 2011 09:37:09 GMT]]></title><description><![CDATA[<p>Michael E. schrieb:</p>
<blockquote>
<p>Selbst wenn garantiert wäre, dass das Padding gleich ist, wäre es trotzdem nicht legal, über m auf mat zuzugreifen.</p>
</blockquote>
<p>Das verstehe ich jetzt nicht. Ist das nicht gerade Sinn und Zweck einer union?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2066234</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2066234</guid><dc:creator><![CDATA[Jockelx]]></dc:creator><pubDate>Fri, 20 May 2011 09:37:09 GMT</pubDate></item><item><title><![CDATA[Reply to Wie hieß denn noch der Datentyp ? on Fri, 20 May 2011 09:55:05 GMT]]></title><description><![CDATA[<p>Jockelx schrieb:</p>
<blockquote>
<p>Michael E. schrieb:</p>
<blockquote>
<p>Selbst wenn garantiert wäre, dass das Padding gleich ist, wäre es trotzdem nicht legal, über m auf mat zuzugreifen.</p>
</blockquote>
<p>Das verstehe ich jetzt nicht. Ist das nicht gerade Sinn und Zweck einer union?</p>
</blockquote>
<p>C++98 Kapitel 9.5 schrieb:</p>
<blockquote>
<p>In a union, at most one of the data members can be active at any time, that is, the value of at most one of the data members can be stored in a union at any time.</p>
</blockquote>
<p>Der einzige Sinn von Unions ist es, Speicher zu sparen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2066236</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2066236</guid><dc:creator><![CDATA[Michael E.]]></dc:creator><pubDate>Fri, 20 May 2011 09:55:05 GMT</pubDate></item><item><title><![CDATA[Reply to Wie hieß denn noch der Datentyp ? on Fri, 20 May 2011 10:15:22 GMT]]></title><description><![CDATA[<p>Mmh...<br />
Heisst das jetzt, dass in einer union zwar mehrere Member sein dürfen, aber pro Instanz nur ein Member genutzt werden darf?</p>
<p>Ich bin etwas verwundert ,denn als Std-Beispiel für uinon hab ich sowas im Kopf</p>
<pre><code class="language-cpp">union blub
{
  int32 bla;
  char bla1;
  char bla2;
  char bla3;
  char bla4;
}
</code></pre>
<p>zum setzen/lesen einzelner Byteteile in einem int.<br />
Das wäre demnach auch quatsch, richtig?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2066244</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2066244</guid><dc:creator><![CDATA[Jockelx]]></dc:creator><pubDate>Fri, 20 May 2011 10:15:22 GMT</pubDate></item><item><title><![CDATA[Reply to Wie hieß denn noch der Datentyp ? on Fri, 20 May 2011 11:32:19 GMT]]></title><description><![CDATA[<p>Jockelx schrieb:</p>
<blockquote>
<p>Mmh...<br />
Heisst das jetzt, dass in einer union zwar mehrere Member sein dürfen, aber pro Instanz nur ein Member genutzt werden darf?</p>
</blockquote>
<p>Du darfst natürlich den Member ändern, den du nutzt. Aber der erste Zugriff auf einen anderen Member muss dann ein schreibender Zugriff sein.</p>
<blockquote>
<p>Ich bin etwas verwundert ,denn als Std-Beispiel für uinon hab ich sowas im Kopf</p>
<pre><code class="language-cpp">union blub
{
  int32 bla;
  char bla1;
  char bla2;
  char bla3;
  char bla4;
}
</code></pre>
<p>zum setzen/lesen einzelner Byteteile in einem int.<br />
Das wäre demnach auch quatsch, richtig?</p>
</blockquote>
<p>Klappt zwar meistens (wenn man Endianness beachtet), ist aber nicht definiert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2066288</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2066288</guid><dc:creator><![CDATA[Michael E.]]></dc:creator><pubDate>Fri, 20 May 2011 11:32:19 GMT</pubDate></item><item><title><![CDATA[Reply to Wie hieß denn noch der Datentyp ? on Fri, 20 May 2011 11:30:53 GMT]]></title><description><![CDATA[<p>Aha.<br />
Werde ich zwar vermutlich wieder nur unter 'unions sind komisch und brauch ich nicht' abspeichern,<br />
aber Danke für die Erklärung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2066290</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2066290</guid><dc:creator><![CDATA[Jockelx]]></dc:creator><pubDate>Fri, 20 May 2011 11:30:53 GMT</pubDate></item><item><title><![CDATA[Reply to Wie hieß denn noch der Datentyp ? on Fri, 20 May 2011 11:49:08 GMT]]></title><description><![CDATA[<p>Skym0sh0 schrieb:</p>
<blockquote>
<p>wieso?<br />
wenn man weiss, was man macht, ist das doch ok?!?</p>
<p>wie würdest du denn sonst zum beispiel eine 4x4 matrix darstellen?</p>
<pre><code class="language-cpp">union Matrix 
{
    float mat[4][4];
    struct m
    {
         float _11, _12, _13, _14;
         float _21, _22, _23, _24;
         float _31, _32, _33, _34;
         float _41, _42, _43, _44;
    };
};
</code></pre>
<p>so kann man per array index zugreifen oder halt per variablen ansprache...</p>
</blockquote>
<p>U.u. dann wenn du eine Member<em>variable</em> m definieren würdest und nicht einen Member<em>typ</em>.</p>
<p>Persönlich bin ich von dem Paddingargument ja nicht überzeugt, selbst wenn der Wortlaut des Standards das erlaubt, scheint es mir doch gegen die Intention der Standardkomittes zu sprechen.</p>
<p>Wenn wir annehmen, dass Padding kein Problem darstellt, sehe ich allerdings keine Einwände hinsichtlich undefinierten Verhaltens.</p>
<p>Jockelx schrieb:</p>
<blockquote>
<p>Mmh...<br />
Heisst das jetzt, dass in einer union zwar mehrere Member sein dürfen, aber pro Instanz nur ein Member genutzt werden darf?</p>
<p>Ich bin etwas verwundert ,denn als Std-Beispiel für uinon hab ich sowas im Kopf</p>
<p>zum setzen/lesen einzelner Byteteile in einem int.<br />
Das wäre demnach auch quatsch, richtig?</p>
</blockquote>
<p>Gemeint ist sicher so etwas:</p>
<pre><code class="language-cpp">union blub
{
  int32 bla;
  char blab[sizeof(int32)];
};
</code></pre>
<p>Das ist unproblematisch.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2066297</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2066297</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Fri, 20 May 2011 11:49:08 GMT</pubDate></item><item><title><![CDATA[Reply to Wie hieß denn noch der Datentyp ? on Fri, 20 May 2011 11:57:05 GMT]]></title><description><![CDATA[<p>camper schrieb:</p>
<blockquote>
<p>Wenn wir annehmen, dass Padding kein Problem darstellt, sehe ich allerdings keine Einwände hinsichtlich undefinierten Verhaltens.</p>
</blockquote>
<p>Ich hab zwar immer Angst, mich mit dir bzgl. des Standards anzulegen, aber wo siehst du eine Rechtfertigung, dass es <em>nicht</em> undefiniertes Verhalten sein soll?</p>
<blockquote>
<p>Gemeint ist sicher so etwas:</p>
<pre><code class="language-cpp">union blub
{
  int32 bla;
  char blab[sizeof(int32)];
};
</code></pre>
<p>Das ist unproblematisch.</p>
</blockquote>
<p>Nur was rauskommt, weiß man nicht <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="😉"
    /> Ist es Big Endian oder Little Endian? Verhält char sich wie signed char oder wie unsigned char? Warum werden die Bits in einem Char nicht in einer anderen Reihenfolge interpretiert als bei einem int-Byte? Warum ist es überhaupt definiert?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2066304</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2066304</guid><dc:creator><![CDATA[Michael E.]]></dc:creator><pubDate>Fri, 20 May 2011 11:57:05 GMT</pubDate></item><item><title><![CDATA[Reply to Wie hieß denn noch der Datentyp ? on Fri, 20 May 2011 12:01:31 GMT]]></title><description><![CDATA[<p>camper schrieb:</p>
<blockquote>
<p>Gemeint ist sicher so etwas:</p>
<pre><code class="language-cpp">union blub
{
  int32 bla;
  char blab[sizeof(int32)];
};
</code></pre>
<p>Das ist unproblematisch.</p>
</blockquote>
<p>Wirklich? Ich hab ja gestern einiges gelernt über undefiniertes Verhalten (anderer Thread: <a href="http://www.c-plusplus.net/forum/286938" rel="nofollow">http://www.c-plusplus.net/forum/286938</a> ), und wenn ich das hier mal anwende, dann könnte ein Compiler diese union folgendermaßen behandeln. Jeder Zugriff auf einen Member, der beweisbar vorher durch Schreibzugriff auf einen anderen Member invalidiert wurde, kann ignoriert werden, da er undefiniertes Verhalten auslöst. Das heißt z.B.</p>
<pre><code class="language-cpp">blub B;
B.bla = 42;

if (x != 0)
  B.blab[0] = 42;

B.bla += x; // kann wegoptimiert werden, da die einzige legale Ablaufsequenz notwendig x==0 impliziert
</code></pre>
<p>Mir fällt auf die Schnelle kein besseres Beispiel ein, ich hoffe, es wird ungefähr klar, was ich meine.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2066307</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2066307</guid><dc:creator><![CDATA[Bashar]]></dc:creator><pubDate>Fri, 20 May 2011 12:01:31 GMT</pubDate></item><item><title><![CDATA[Reply to Wie hieß denn noch der Datentyp ? on Fri, 20 May 2011 12:06:50 GMT]]></title><description><![CDATA[<p>Wozu denn dieses <code>union</code> -Gefrickel, wenn man doch etwas ganz anderes erreichen möchte?</p>
<pre><code class="language-cpp">int i = 12;
char *p = reinterpret_cast&lt;char *&gt;(&amp;i);
if (*p == 12)
	..
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2066315</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2066315</guid><dc:creator><![CDATA[TyRoXx]]></dc:creator><pubDate>Fri, 20 May 2011 12:06:50 GMT</pubDate></item><item><title><![CDATA[Reply to Wie hieß denn noch der Datentyp ? on Fri, 20 May 2011 12:22:00 GMT]]></title><description><![CDATA[<p>Bashar schrieb:</p>
<blockquote>
<p>Wirklich? Ich hab ja gestern einiges gelernt über undefiniertes Verhalten (anderer Thread: <a href="http://www.c-plusplus.net/forum/286938" rel="nofollow">http://www.c-plusplus.net/forum/286938</a> ), und wenn ich das hier mal anwende, dann könnte ein Compiler diese union folgendermaßen behandeln. Jeder Zugriff auf einen Member, der beweisbar vorher durch Schreibzugriff auf einen anderen Member invalidiert wurde, kann ignoriert werden, da er undefiniertes Verhalten auslöst.</p>
</blockquote>
<p>Keineswegs, was beweist wie subtil die Sprache des Standards sein kann:</p>
<blockquote>
<p>In a union, at most one of the data members can be active at any time, that is, the <strong>value</strong> of at most one of the data members can be stored in a union at any time. [Note: one special guarantee is made in order to simplify the use of unions: If a POD-union contains several POD-structs that share a common initial<br />
sequence (9.2), and if an object of this POD-union type contains one of the POD-structs, it is permitted to inspect the common initial sequence of any of POD-struct members; see 9.2. ]</p>
</blockquote>
<p>Nirgendwo steht hier, dass der lesende Zugriff über ein anders Member <em>per se</em> undefiniert wäre. Was hier steht ist, dass die anderen Member keine eigenen Wert haben und folglich, da auf das gleiche Objekt zugegriffen wird, das Ergebnis des Zugriffs vom Wert des zuletzt geschriebenen Members abhängt. Und das ist ausreichend, da zu jeder beliebigen Objektrepräsentation (die ja von allen Membern geteilt wird) eine eindeutige Wertrepräsentation gehört.<br />
Undefiniert wird es erst durch die Einschränkungen, die in 3.10/15 zu finden sind (aliasing). In gewisser Weise dient der erste Satz nur dazu, dafür zu sorgen, dass die Aliasregeln überhaupt auf diesen Fall angewendet werden können, andernfalls wäre nämlich nicht klar, auf den Wert welchen Objektes überhaupt zugegriffen wird.</p>
<p>Interesessant ist in diesem Zusammenhang die folgende Bemerkung (nicht normativ, was dort gesagt wird, könnten wir also auch aus anderen Regeln herleiten) - wenn alle POD-structs mit gleicher Anfangssequenz für diese Sequenz das gleiche Speicherlayout haben müssen, spricht das meiner Meinung nach stark dagegen, dass der Compiler (abgesehen vom Ende des structs) nach Belieben Padding einführen darf.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2066322</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2066322</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Fri, 20 May 2011 12:22:00 GMT</pubDate></item><item><title><![CDATA[Reply to Wie hieß denn noch der Datentyp ? on Fri, 20 May 2011 12:27:48 GMT]]></title><description><![CDATA[<p>Michael E. schrieb:</p>
<blockquote>
<p>Nur was rauskommt, weiß man nicht <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="😉"
    /> Ist es Big Endian oder Little Endian? Verhält char sich wie signed char oder wie unsigned char? Warum werden die Bits in einem Char nicht in einer anderen Reihenfolge interpretiert als bei einem int-Byte? Warum ist es überhaupt definiert?</p>
</blockquote>
<p>Einige dieser Fragen werden durch den Standard geklärt, andere müssen von der jeweiligen Implementation definiert werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2066330</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2066330</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Fri, 20 May 2011 12:27:48 GMT</pubDate></item><item><title><![CDATA[Reply to Wie hieß denn noch der Datentyp ? on Fri, 20 May 2011 12:34:16 GMT]]></title><description><![CDATA[<p>camper schrieb:</p>
<blockquote>
<p>Nirgendwo steht hier, dass der lesende Zugriff über ein anders Member <em>per se</em> undefiniert wäre. Was hier steht ist, dass die anderen Member keine eigenen Wert haben und folglich, da auf das gleiche Objekt zugegriffen wird, das Ergebnis des Zugriffs vom Wert des zuletzt geschriebenen Members abhängt. Und das ist ausreichend, da zu jeder beliebigen Objektrepräsentation (die ja von allen Membern geteilt wird) eine eindeutige Wertrepräsentation gehört.</p>
</blockquote>
<p>Du greifst aber nicht auf das Objekt, sondern auf einen Member des Objekts zu. Dass an dieser Stelle ein Bitmuster steht, macht den Zugriff nicht legal.</p>
<blockquote>
<p>Interesessant ist in diesem Zusammenhang die folgende Bemerkung (nicht normativ, was dort gesagt wird, könnten wir also auch aus anderen Regeln herleiten) - wenn alle POD-structs mit gleicher Anfangssequenz für diese Sequenz das gleiche Speicherlayout haben müssen, spricht das meiner Meinung nach stark dagegen, dass der Compiler (abgesehen vom Ende des structs) nach Belieben Padding einführen darf.</p>
</blockquote>
<p>Wieso?</p>
<p>camper schrieb:</p>
<blockquote>
<p>Michael E. schrieb:</p>
<blockquote>
<p>Nur was rauskommt, weiß man nicht <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="😉"
    /> Ist es Big Endian oder Little Endian? Verhält char sich wie signed char oder wie unsigned char? Warum werden die Bits in einem Char nicht in einer anderen Reihenfolge interpretiert als bei einem int-Byte? Warum ist es überhaupt definiert?</p>
</blockquote>
<p>Einige dieser Fragen werden durch den Standard geklärt, andere müssen von der jeweiligen Implementation definiert werden.</p>
</blockquote>
<p>Welche werden denn vom Standard geklärt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2066336</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2066336</guid><dc:creator><![CDATA[Michael E.]]></dc:creator><pubDate>Fri, 20 May 2011 12:34:16 GMT</pubDate></item><item><title><![CDATA[Reply to Wie hieß denn noch der Datentyp ? on Fri, 20 May 2011 12:37:56 GMT]]></title><description><![CDATA[<p>PS: Hab noch ne schöne Anekdote gefunden:</p>
<blockquote>
<p>Conversion by union can be a disaster. Been there, done that. The BSD kernel used<br />
to have a union that essentially looked like this:</p>
<p>union u {<br />
char* c;<br />
short* s;<br />
int* i;<br />
long* l;<br />
};</p>
<p>and used to be loosy goosy vax and store into one field and read back from another.</p>
<p>This was fine until we were porting to a machine that encodes the operand size in<br />
the low order bits of the pointer. That led to some fun hunting.</p>
</blockquote>
<p>Quelle: <a href="http://www.velocityreviews.com/forums/t284331-p2-undefined-behaviour.html" rel="nofollow">http://www.velocityreviews.com/forums/t284331-p2-undefined-behaviour.html</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2066340</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2066340</guid><dc:creator><![CDATA[Michael E.]]></dc:creator><pubDate>Fri, 20 May 2011 12:37:56 GMT</pubDate></item><item><title><![CDATA[Reply to Wie hieß denn noch der Datentyp ? on Fri, 20 May 2011 13:35:10 GMT]]></title><description><![CDATA[<p>Michael E. schrieb:</p>
<blockquote>
<p>Du greifst aber nicht auf das Objekt, sondern auf einen Member des Objekts zu.</p>
</blockquote>
<p>Subobjekte sind keine Objekte?</p>
<p>Michael E. schrieb:</p>
<blockquote>
<p>Wieso?</p>
</blockquote>
<p>Dazu schreib ich später noch was.</p>
<p>Michael E. schrieb:</p>
<blockquote>
<p>camper schrieb:</p>
<blockquote>
<p>Michael E. schrieb:</p>
<blockquote>
<p>Nur was rauskommt, weiß man nicht <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="😉"
    /> Ist es Big Endian oder Little Endian? Verhält char sich wie signed char oder wie unsigned char? Warum werden die Bits in einem Char nicht in einer anderen Reihenfolge interpretiert als bei einem int-Byte? Warum ist es überhaupt definiert?</p>
</blockquote>
<p>Einige dieser Fragen werden durch den Standard geklärt, andere müssen von der jeweiligen Implementation definiert werden.</p>
</blockquote>
<p>Welche werden denn vom Standard geklärt?</p>
</blockquote>
<blockquote>
<p>Warum ist es überhaupt definiert?</p>
</blockquote>
<p>3.9, 3.9.1</p>
<blockquote>
<p>Warum werden die Bits in einem Char nicht in einer anderen Reihenfolge interpretiert als bei einem int-Byte?</p>
</blockquote>
<p>Das ist eine sinnlose Frage: da bytes die kleinste adressierbare Einheit darstellen, existiert soetwas wie eine Reihenfolge von Bits innerhalb eines chars nicht, ansonsten 3.9.1/7</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2066372</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2066372</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Fri, 20 May 2011 13:35:10 GMT</pubDate></item><item><title><![CDATA[Reply to Wie hieß denn noch der Datentyp ? on Fri, 20 May 2011 13:38:32 GMT]]></title><description><![CDATA[<p>camper schrieb:</p>
<blockquote>
<blockquote>
<p>Warum werden die Bits in einem Char nicht in einer anderen Reihenfolge interpretiert als bei einem int-Byte?</p>
</blockquote>
<p>Das ist eine sinnlose Frage: da bytes die kleinste adressierbare Einheit darstellen, existiert soetwas wie eine Reihenfolge von Bits innerhalb eines chars nicht, ansonsten 3.9.1/7</p>
</blockquote>
<p>Nur weil du nicht auf die interne Darstellung zugreifen kannst, heißt das nicht, dass sie nicht unterschiedlich sein dürfte. Die zugrundeliegende Hardware hat schließlich nicht die Einschränkungen den Programmierers.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2066379</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2066379</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Fri, 20 May 2011 13:38:32 GMT</pubDate></item><item><title><![CDATA[Reply to Wie hieß denn noch der Datentyp ? on Fri, 20 May 2011 13:46:15 GMT]]></title><description><![CDATA[<p>camper schrieb:</p>
<blockquote>
<p>Michael E. schrieb:</p>
<blockquote>
<p>Du greifst aber nicht auf das Objekt, sondern auf einen Member des Objekts zu.</p>
</blockquote>
<p>Subobjekte sind keine Objekte?</p>
</blockquote>
<p>Du sagst, dass du auf das <strong>gleiche</strong> Objekt zugreifst.</p>
<blockquote>
<blockquote>
<p>Warum ist es überhaupt definiert?</p>
</blockquote>
<p>3.9, 3.9.1</p>
</blockquote>
<p>Kannst du das bitte etwas konkretisieren?</p>
<blockquote>
<blockquote>
<p>Warum werden die Bits in einem Char nicht in einer anderen Reihenfolge interpretiert als bei einem int-Byte?</p>
</blockquote>
<p>Das ist eine sinnlose Frage: da bytes die kleinste adressierbare Einheit darstellen, existiert soetwas wie eine Reihenfolge von Bits innerhalb eines chars nicht, ansonsten 3.9.1/7</p>
</blockquote>
<p>Die Reihenfolge existiert sehr wohl, wie SeppJ schon bemerkt hat. Außerdem kann ich in 3.9.1/7 nicht sehen, dass die Reihenfolge festgelegt wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2066382</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2066382</guid><dc:creator><![CDATA[Michael E.]]></dc:creator><pubDate>Fri, 20 May 2011 13:46:15 GMT</pubDate></item><item><title><![CDATA[Reply to Wie hieß denn noch der Datentyp ? on Fri, 20 May 2011 14:02:30 GMT]]></title><description><![CDATA[<p>Michael E. schrieb:</p>
<blockquote>
<p>camper schrieb:</p>
<blockquote>
<p>Michael E. schrieb:</p>
<blockquote>
<p>Du greifst aber nicht auf das Objekt, sondern auf einen Member des Objekts zu.</p>
</blockquote>
<p>Subobjekte sind keine Objekte?</p>
</blockquote>
<p>Du sagst, dass du auf das <strong>gleiche</strong> Objekt zugreifst.</p>
</blockquote>
<p>Objekte sind bestimmte Speicherbereiche. Greife ich auf den gleichen Speicherbereich zu, ist es das gleiche Objekt.</p>
<blockquote>
<blockquote>
<blockquote>
<p>Warum ist es überhaupt definiert?</p>
</blockquote>
<p>3.9, 3.9.1</p>
</blockquote>
<p>Kannst du das bitte etwas konkretisieren?</p>
</blockquote>
<p>Wenn die Frage konkretisiert wird.</p>
<blockquote>
<p>Michael E. schrieb:</p>
<blockquote>
<blockquote>
<p>Warum werden die Bits in einem Char nicht in einer anderen Reihenfolge interpretiert als bei einem int-Byte?</p>
</blockquote>
<p>Das ist eine sinnlose Frage: da bytes die kleinste adressierbare Einheit darstellen, existiert soetwas wie eine Reihenfolge von Bits innerhalb eines chars nicht, ansonsten 3.9.1/7</p>
</blockquote>
<p>Die Reihenfolge existiert sehr wohl, wie SeppJ schon bemerkt hat. Außerdem kann ich in 3.9.1/7 nicht sehen, dass die Reihenfolge festgelegt wird.</p>
</blockquote>
<p>Bevor ich mich auf Glatteise begebe, bitte ich um eine präzisere Fragestellung. Der Standard kennt keine Reihenfolgen von bits, nur Wertigkeiten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2066383</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2066383</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Fri, 20 May 2011 14:02:30 GMT</pubDate></item><item><title><![CDATA[Reply to Wie hieß denn noch der Datentyp ? on Fri, 20 May 2011 14:13:30 GMT]]></title><description><![CDATA[<p>camper schrieb:</p>
<blockquote>
<p>Michael E. schrieb:</p>
<blockquote>
<p>camper schrieb:</p>
<blockquote>
<p>Michael E. schrieb:</p>
<blockquote>
<p>Du greifst aber nicht auf das Objekt, sondern auf einen Member des Objekts zu.</p>
</blockquote>
<p>Subobjekte sind keine Objekte?</p>
</blockquote>
<p>Du sagst, dass du auf das <strong>gleiche</strong> Objekt zugreifst.</p>
</blockquote>
<p>Objekte sind bestimmte Speicherbereiche. Greife ich auf den gleichen Speicherbereich zu, ist es das gleiche Objekt.</p>
</blockquote>
<pre><code class="language-cpp">struct Foo
{
    int bar;
};

Foo foo;
</code></pre>
<p>Sind foo und foo.bar das gleiche Objekt?</p>
<blockquote>
<blockquote>
<p>Kannst du das bitte etwas konkretisieren?</p>
</blockquote>
<p>Wenn die Frage konkretisiert wird.</p>
</blockquote>
<p>Warum ist der Zugriff auf blab[0] nicht undefiniert, wenn der letzte schreibende Zugriff auf bla war?</p>
<blockquote>
<p>Michael E. schrieb:</p>
<blockquote>
<p>Die Reihenfolge existiert sehr wohl, wie SeppJ schon bemerkt hat. Außerdem kann ich in 3.9.1/7 nicht sehen, dass die Reihenfolge festgelegt wird.</p>
</blockquote>
<p>Bevor ich mich auf Glatteise begebe, bitte ich um eine präzisere Fragestellung. Der Standard kennt keine Reihenfolgen von bits, nur Wertigkeiten.</p>
</blockquote>
<p>Warum ist Folgendes nicht möglich? Bei chars steht das höchstwertige Bit vorne im Byte, bei ints steht das höchstwertige Bit hinten im Byte. Wenn ich einen int schreibe und einen char an dieser Position lese, wurden die Wertigkeiten verändert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2066390</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2066390</guid><dc:creator><![CDATA[Michael E.]]></dc:creator><pubDate>Fri, 20 May 2011 14:13:30 GMT</pubDate></item></channel></rss>