<?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[Subtraktion zweier Zeiger IMMER definiert?]]></title><description><![CDATA[<pre><code class="language-cpp">class X
{
	int a;
	int b;
};

int main()
{
	X* p1 = reinterpret_cast&lt;X*&gt;(342);
	X* p2 = reinterpret_cast&lt;X*&gt;(452234);

	std::cout &lt;&lt; (p2 - p1) &lt;&lt; std::endl;

	test::wait(&quot;Press ENTER to exit...&quot;);

	return 0;
}
</code></pre>
<p>Was auch X ist, ist dies immer definiert? Also gibt es da kein undefiniertes Verhalten?</p>
<p>Hintergrund ist der folgende:</p>
<pre><code class="language-cpp">bool Class::is_in_container(Object&amp; obj)
{
  if(m_objVector.empty())
  { return false; }

  Object* first = &amp;m_objVector[0];
  Object* request = &amp;obj;

  return request == first ||
         (request &gt; first &amp;&amp; 
         (request - first) &lt; m_objVector.size());
};
</code></pre>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/226763/subtraktion-zweier-zeiger-immer-definiert</link><generator>RSS for Node</generator><lastBuildDate>Wed, 30 Sep 2026 11:36:12 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/226763.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 05 Nov 2008 16:02:05 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Subtraktion zweier Zeiger IMMER definiert? on Wed, 05 Nov 2008 16:02:05 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">class X
{
	int a;
	int b;
};

int main()
{
	X* p1 = reinterpret_cast&lt;X*&gt;(342);
	X* p2 = reinterpret_cast&lt;X*&gt;(452234);

	std::cout &lt;&lt; (p2 - p1) &lt;&lt; std::endl;

	test::wait(&quot;Press ENTER to exit...&quot;);

	return 0;
}
</code></pre>
<p>Was auch X ist, ist dies immer definiert? Also gibt es da kein undefiniertes Verhalten?</p>
<p>Hintergrund ist der folgende:</p>
<pre><code class="language-cpp">bool Class::is_in_container(Object&amp; obj)
{
  if(m_objVector.empty())
  { return false; }

  Object* first = &amp;m_objVector[0];
  Object* request = &amp;obj;

  return request == first ||
         (request &gt; first &amp;&amp; 
         (request - first) &lt; m_objVector.size());
};
</code></pre>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1610708</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1610708</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Wed, 05 Nov 2008 16:02:05 GMT</pubDate></item><item><title><![CDATA[Reply to Subtraktion zweier Zeiger IMMER definiert? on Wed, 05 Nov 2008 16:20:24 GMT]]></title><description><![CDATA[<p>Kann undefiniert sein:</p>
<p>ISO/IEC 14882:2003 §5.7.6 schrieb:</p>
<blockquote>
<p>When two pointers to elements of the same array object are subtracted [...] Unless both pointers point to elements of the same array object, or one past the last element of the array object, the behavior is undefined.</p>
</blockquote>
<p>Wenn <code>&amp;obj</code> also jenseits <code>&amp;(*objVector.end())</code> liegt, ist die Mimik undefiniert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1610713</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1610713</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Wed, 05 Nov 2008 16:20:24 GMT</pubDate></item><item><title><![CDATA[Reply to Subtraktion zweier Zeiger IMMER definiert? on Thu, 06 Nov 2008 06:17:42 GMT]]></title><description><![CDATA[<ol>
<li>
<p>Nein, es ist nicht definiert. Schon allein der reinterpret_cast von int nach X* kann alles mögliche ergeben, weil vom Standard nichtmal garantiert ist, dass int und X* gleichviel Speicher belegen.</p>
</li>
<li>
<p>Das hat mit deiner Problematik garnichts zu tun. In dem Code den du als Hintergrund angegeben hast ist kein reinterpret_cast verwendet worden sondern nur Pointerarithmetik. Was du dort tust ist allerdings auch nicht immer definiert, da der Vergleich mittels operator &gt; nicht immer definiert ist (nämlich nur, wenn beide Pointer in eine zusammenhängende Datenstruktur zeigen, sei die dynamisch allokiert oder eine automatische Variable). Gleiches gilt dann auch für die Differenz.</p>
</li>
<li>
<p>Du fragst ob die Differen definiert ist - die Antwort ist also nein. Schlauer wäre gewesen zu fragen &quot;kann man das was ich vorhabe so umsetzen, oder gibts ne bessere Möglichkeit?&quot;. Dann hätte man dir nämlich z.B antworten können:<br />
&quot;Ja, es gibt ne bessere Möglichkeit. Schau mal unter <a href="http://www.cplusplus.com/reference/algorithm/find.html" rel="nofollow">www.cplusplus.com/reference/algorithm/find.html</a>, damit kannst du das dann so umsetzen:</p>
</li>
</ol>
<pre><code class="language-cpp">bool Class::is_in_container(Object const&amp; obj) const //weder das Object noch das Objekt der Klasse werden verändert, also const wo es geht!
{
  std::vector&lt;Object&gt;::const_iterator begin = m_objVector.begin(),
                                      end = m_objVector.end();
  return std::find(begin, end, obj) != end;
};
</code></pre>
<p>es geht also einfacher als du vorhattest, Vorausgesetzt es gibt einen <code>bool operator==(Object const&amp;, Object const&amp;)</code> .&quot;</p>
<p>/edith: oder std::find_if wenn wirklich die Adressen gleich sein sollen (siehe später <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/1610721</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1610721</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Thu, 06 Nov 2008 06:17:42 GMT</pubDate></item><item><title><![CDATA[Reply to Subtraktion zweier Zeiger IMMER definiert? on Wed, 05 Nov 2008 16:28:56 GMT]]></title><description><![CDATA[<p>pumuckl schrieb:</p>
<blockquote>
<p>[...]</p>
</blockquote>
<p>Das er std::find benutzen kann, weiss er ganz sicher. Da bin ich zuversichtlich. Ich denke mal, er will sich das Durchiterieren sparen. -&gt; Premature Optimization.</p>
<p>Dravere, Dravere das hätte ich nicht von Dir gedacht *kopfschüttel* SCNR <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="😃"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1610724</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1610724</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Wed, 05 Nov 2008 16:28:56 GMT</pubDate></item><item><title><![CDATA[Reply to Subtraktion zweier Zeiger IMMER definiert? on Wed, 05 Nov 2008 17:04:03 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/9960">@pumuckl</a> &amp; Tachyon,<br />
Ich muss euch beiden leider unrecht geben, ich habe nämlich genau die Frage gestellt, welche das Problem darstellt, das ich hatte.<br />
Tatsächlich habe ich es nicht so umgesetzt, weil diese Lösung bereits früh aussortiert wurde, zugunsten von besseren Lösungen. Es war eine von vielen Ideen aus einem Brainstorming und ich wollte einfach wissen, ob dies definiert ist oder nicht, da ich es selber nicht wusste. Es ist also eine rein theoretische Frage.</p>
<p>Im übrigen, auch wenn es jetzt unsinnig ist, dies anzumerken, ist die Lösung mit <code>std::find</code> nicht ganz daselbe. Bei meinem Beispiel prüfe ich nach, ob das Objekt im Vektor ist und nicht nur sein Zustand. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>Aber danke für die Antwort und den Link pumuckl. Ich hatte ihn aber schon zwischengespeichert, weil ich den so gut finde <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>Und ich bin enttäuscht, dass ihr mir sowas unterstellen könnt, dass ich nicht mal <code>std::find</code> kenne oder premature optimisation durchführe. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1610753</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1610753</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Wed, 05 Nov 2008 17:04:03 GMT</pubDate></item><item><title><![CDATA[Reply to Subtraktion zweier Zeiger IMMER definiert? on Wed, 05 Nov 2008 17:18:54 GMT]]></title><description><![CDATA[<p>Dravere schrieb:</p>
<blockquote>
<p>Und ich bin enttäuscht, dass ihr mir sowas unterstellen könnt, dass ich nicht mal <code>std::find</code> kenne oder premature optimisation durchführe. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
</blockquote>
<p>Oooh... Fühlst du dich in deiner Ehre als C++-Programmierer verletzt? :p</p>
<p>Zum Thema: Wieso ist die Differenz zweier Zeiger undefiniert? Zeiger speichern ja Adressen, also Integer. Man könnte ja auch <code>reinterpret_cast</code> en und dann eine <code>int</code> -Subtraktion durchführen...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1610760</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1610760</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Wed, 05 Nov 2008 17:18:54 GMT</pubDate></item><item><title><![CDATA[Reply to Subtraktion zweier Zeiger IMMER definiert? on Wed, 05 Nov 2008 17:32:26 GMT]]></title><description><![CDATA[<p>najut, dann ist die frage mit dem rinterpret_cast immernoch zumindest irreführend, hättest gleich sagen können dass die Referenz auf das selbe physikalische Objekt zeigen soll. Wenn du op== allerdings so definierst, dass er genau dann true zurück gibt wenn die Adressen die gleichen sind und nicht die Inhalte, dann gehts mit std::find sehr wohl. Da man das aber von einem op== nicth verlangen kann, muss ein eigenen Prädikat her und std::find_if</p>
<pre><code class="language-cpp">//irgendwo, vielleicht gibts das schon in boost oder &lt;functional&gt;?
template &lt;typename T1, typename T2&gt;
struct CompAdress 
{
  bool operator() (T1 const&amp; lhs, T2 const&amp; rhs)
  {
    return &amp;lhs == &amp;rhs; //Zeigervergleich!
  }
};

bool Class::is_in_container(Object const&amp; obj) const 
{
  std::vector&lt;Object&gt;::const_iterator begin = m_objVector.begin(),
                                      end = m_objVector.end();
  return std::find_if(begin, end, boost::bind(CompAdress&lt;Object,Object&gt;(),obj)) != end;
};
</code></pre>
<p>So in der Art, keine Gewähr für richtige Verwendung von boost::bind. Das kann man natürlich auch etwas vereinfachen wenn man nicht gleich Boost und templates auffahren will:</p>
<pre><code class="language-cpp">bool Class::is_in_container(Object const&amp; obj) const 
{
  struct Cmp //(!)Lokale Klassen sind ein etwas unbekannteres Feature von C++ ;)
  {
    Cmp(Object const* const ptr) : ptr(ptr) {}
    bool operator()(Object const&amp; o) const {return &amp;o == ptr;}
  private:
    Object const* const ptr;
  }; 
  std::vector&lt;Object&gt;::const_iterator begin = m_objVector.begin(),
                                      end = m_objVector.end();
  return std::find_if(begin, end, Cmp(&amp;obj)) != end;
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1610766</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1610766</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Wed, 05 Nov 2008 17:32:26 GMT</pubDate></item><item><title><![CDATA[Reply to Subtraktion zweier Zeiger IMMER definiert? on Wed, 05 Nov 2008 17:44:25 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Zeiger speichern ja Adressen, also Integer.</p>
</blockquote>
<p>Zwei Fehler.<br />
Erstens: Zeiger sind ein arithmetischer Datentyp, mehr sagt der Standard nicht aus. Dass sie nur eine einzelne Adresse beinhalten ist zwar auf &quot;normalen&quot; Systemen der Fall, kann aber durchaus anders sein. Auf einem etwas exotischeren System das explizit mit Dingen wie z.B. Cluster mit verteiltem Speicher arbeitet, könnte der Compiler einen Zeiger z.B. als Datenstruktur implementieren, die als ein Element einen eindeutigen Bezeichner für die Clusterkomponente und als zweites Element eine übliche Adresse im Speicher dieser Komponente enthält. Damit wäre auch schon ein Beispiel geschaffen wo zwei Zeiger nicht mehr vergleichbar sind bzw. keine Differenzen gebildet werden können. Wenn sich beide Zeiger auf verschiedene Clusterkomponenten beziehen ist ein Vergleich der puren Adressen sinnfrei.<br />
Zweitens: es ist wie schon gesagt nirgendwo garantiert, dass ein handelsüblicher Zeiger in der Größe einem Integer (oder genauer einem unsigned int) entspricht. Ein Compilerhersteller kann durchaus der Meinung sein, dass auf einem 64bit-System mit 8Byte-Zeigern ein int trotzdem noch 4 Byte groß sein sollte (&quot;das war schon immer so...&quot; *hust*). Das wäre völlig legal und im Sinne des Standards.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1610775</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1610775</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Wed, 05 Nov 2008 17:44:25 GMT</pubDate></item><item><title><![CDATA[Reply to Subtraktion zweier Zeiger IMMER definiert? on Wed, 05 Nov 2008 18:11:37 GMT]]></title><description><![CDATA[<p>Danke für deine Antwort, pumuckl. Jetzt bin ich wirklich etwas erstaunt. Man lernt sogar über die grundlegendsten Dinge immer wieder dazu... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>pumuckl schrieb:</p>
<blockquote>
<p>Zeiger sind ein arithmetischer Datentyp, mehr sagt der Standard nicht aus. [...] könnte der Compiler einen Zeiger z.B. als Datenstruktur implementieren, die als ein Element einen eindeutigen Bezeichner für die Clusterkomponente und als zweites Element eine übliche Adresse im Speicher dieser Komponente enthält.</p>
</blockquote>
<p>Mit Integer meinte ich nicht nur <code>int</code> , sondern allgemein einen integralen Datentyp. Aber eine komplexere Datenstruktur ist ja kein arithmetischer Datentyp mehr?</p>
<p>Und gibt es solche exotischen Systeme tatsächlich oder ist das ein nicht vorhandener, aber prinzipiell erlaubter Fall?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1610785</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1610785</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Wed, 05 Nov 2008 18:11:37 GMT</pubDate></item><item><title><![CDATA[Reply to Subtraktion zweier Zeiger IMMER definiert? on Wed, 05 Nov 2008 18:43:23 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Aber eine komplexere Datenstruktur ist ja kein arithmetischer Datentyp mehr?</p>
</blockquote>
<p>Eine Datenstruktur, wo einige Bytes als Mantisse, ein Bit als Vorzeichen und ein paar weitere Bytes als Exponent interpretiert werden mit den entsprechenden Algorithmen für arithmetische Operationen (die komplizierter sind als einfache Integeraddition etc.) nennt sich z.B. double <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="😉"
    /> Was spricht dagegen, dass eine andere Datenstruktur, die z.B. aus 4 Bytes für eine systeminterne IP-ähnliche Komponentenadresse und 4 Bytes für einen 0/8/15 Pointer besteht, auch ein arithmetischer Typ sein kann? Zumal in dem Fall die arithmetischen Operationen explizit nur innerhalb bestimmter Untermengen definiert sind (z.B. wenn die 4 Bytes für die Komponentenadresse jeweils gleich sind...)</p>
<blockquote>
<p>Und gibt es solche exotischen Systeme tatsächlich oder ist das ein nicht vorhandener, aber prinzipiell erlaubter Fall?</p>
</blockquote>
<p>Mal ganz ehrlich: so genau will ich das garnicht wissen obs sowas gibt <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1610794</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1610794</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Wed, 05 Nov 2008 18:43:23 GMT</pubDate></item><item><title><![CDATA[Reply to Subtraktion zweier Zeiger IMMER definiert? on Wed, 05 Nov 2008 18:40:57 GMT]]></title><description><![CDATA[<p>pumuckl schrieb:</p>
<blockquote>
<p>Was spricht dagegen, dass eine andere Datenstruktur [...] auch ein arithmetischer Typ sein kann?</p>
</blockquote>
<p>Naja, eigentlich nichts. Ich dachte bei Datenstruktur nur als erstes an Container-ähnliche Gebilde (z.B. in Klassen), gerade weil du noch von Elementen sprachst. Tut mir leid, dass ich es so genau genommen habe... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>pumuckl schrieb:</p>
<blockquote>
<p>Mal ganz ehrlich: so genau will ich das garnicht wissen obs sowas gibt <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
</blockquote>
<p>Hehe, mich hats nur gewundert - nicht dass es meinen Alltag jetzt grob beeinflussen würde... <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>Der Standard hätte von mir aus gesehen in vielen Dingen ein wenig strikter sein dürfen. Ich kann mir auch gut vorstellen, dass man trotz guter Kenntnis des C++-Standards ab und zu Undefiniertes tut, ohne es zu wissen. Da das aber in 99.9% aller Fälle gut geht, hat man auch keine Probleme damit und bleibt weiterhin im Unwissen...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1610804</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1610804</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Wed, 05 Nov 2008 18:40:57 GMT</pubDate></item><item><title><![CDATA[Reply to Subtraktion zweier Zeiger IMMER definiert? on Wed, 05 Nov 2008 18:45:32 GMT]]></title><description><![CDATA[<p>Nachtrag:</p>
<p>INCITS+ISO+IEC+14882 schrieb:</p>
<blockquote>
<p><strong>1.7 The C+ + memory model [intro.memory]</strong><br />
1 The fundamental storage unit in the C + + memory model is the byte. A byte is at least large enough to contain<br />
any member of the basic execution character set and is composed of a contiguous sequence of bits, the<br />
number of which is implementation-defined. The least significant bit is called the low-order bit; the most<br />
significant bit is called the high-order bit. The memory available to a C + + program consists of one or more<br />
sequences of contiguous bytes. Every byte has a unique address.</p>
</blockquote>
<p>Betonung auf &quot;one or more Sequence&quot;.</p>
<p>Ich muss ein wenig revidieren was ich vorher geschrieben hab: Der Standard sagt ausdrücklich, dass Pointervergleiche (§5.9) &quot;unspecified&quot; sind (im Gegensatz zu &quot;undefined&quot;), d.h. es kann nicht irgendwas beliebiges <em>passieren</em> (z.B. Absturz, Computer frisst die Katze etc.) sondern es kommt nur etwas beliebiges heraus. Die Differenz zwischen zwei Pointern, die nicht zum Membern des selben Objekts bzw. zu Elementen des selben Arrays zeigen und die nicht null sind, ist dagegen wirklich <em>undefiniert</em> (§5.7).<br />
Der Standard spricht bei den Werten von Pointern auch explizit von Adressen (§3.9.2), aber die interne Repräsentation einer solchen Adresse kann für exotische Systeme eben auch exotisch komplex sein wie oben beschrieben. Das ist dann eben Sache des entsprechenden Systems, wie die Adressen repräsentiert werden.</p>
<p>Pointer sind im Standard also keine arithmetischen Typen, sondern Compund Types, für die arithmetische Operationen utner den entsprechenden Umständen definiert sind.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1610806</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1610806</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Wed, 05 Nov 2008 18:45:32 GMT</pubDate></item><item><title><![CDATA[Reply to Subtraktion zweier Zeiger IMMER definiert? on Wed, 05 Nov 2008 19:24:31 GMT]]></title><description><![CDATA[<p>pumuckl schrieb:</p>
<blockquote>
<p>najut, dann ist die frage mit dem rinterpret_cast immernoch zumindest irreführend, hättest gleich sagen können dass die Referenz auf das selbe physikalische Objekt zeigen soll.</p>
</blockquote>
<p>Naja, mir ging es halt um beliebige Zeiger. Aber hast eigentlich schon recht, der <code>reinterpret_cast</code> war wohl etwas irreführend.<br />
Aber ich dachte wohl, man würde mir nicht gleich solche Unterstellungen hinwerfen ... und vielleicht hatte ich es auch grad im Kopf und war etwas unvorsichtig mit der Formulierung. Mehr für logisch ersichtlich angenommen, als es tatsächlich war.</p>
<p>pumuckl schrieb:</p>
<blockquote>
<p>Wenn du op== allerdings so definierst, dass er genau dann true zurück gibt wenn die Adressen die gleichen sind und nicht die Inhalte, dann gehts mit std::find sehr wohl. Da man das aber von einem op== nicth verlangen kann, muss ein eigenen Prädikat her und std::find_if</p>
</blockquote>
<p>Zwei Dinge hierzu:<br />
1. Ich habe nicht gesagt, dass es nicht möglich wäre, nur das deine Lösung nicht ganz korrekt wäre.<br />
Ich fühle mich wieder in meiner Ehre angegriffen, dass du denkst, ich wüsste sowas nicht ... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /> <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="😃"
    /><br />
2. Man könnte jetzt aber GANZ PINGELIG sein und sagen, dass <code>std::find_if</code> nicht gleich <code>std::find</code> ist. Also hättest du den <code>op==</code> gefälligst überladen sollen :p <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="😃"
    /><br />
3. Nur um das vorauszugreifen. JA, der <code>op==</code> so zu überladen, wäre ÄUSSERST hässlich <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>Im übrigen noch Danke für den Nachtrag und Auszug aus dem Standard!</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1610836</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1610836</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Wed, 05 Nov 2008 19:24:31 GMT</pubDate></item><item><title><![CDATA[Reply to Subtraktion zweier Zeiger IMMER definiert? on Thu, 06 Nov 2008 00:14:06 GMT]]></title><description><![CDATA[<p>Tachyon schrieb:</p>
<blockquote>
<p>Das er std::find benutzen kann, weiss er ganz sicher. Da bin ich zuversichtlich. [...]</p>
</blockquote>
<p>Hmpf, ich habe extra geschrieben, dass ich Dir nicht zutraue, dass Du nichts von std::find weisst, und trotzdem muss man sich dann die bösen Vorwürfe von Dir anhören. Pfff.... :p</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1610929</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1610929</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Thu, 06 Nov 2008 00:14:06 GMT</pubDate></item><item><title><![CDATA[Reply to Subtraktion zweier Zeiger IMMER definiert? on Thu, 06 Nov 2008 00:31:50 GMT]]></title><description><![CDATA[<p>Tz, jetzt kommt noch Zensur ... aber ich habe das Zitat :p</p>
<p>Tachyon schrieb:</p>
<blockquote>
<p>... Ich denke mal, er will sich das Durchiterieren sparen. -&gt; Premature Optimization.</p>
<p>Dravere, Dravere das hätte ich nicht von Dir gedacht *kopfschüttel* SCNR <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="😃"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
</blockquote>
<p>Ging mir halt gleich, konnte auch nicht widerstehen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1610933</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1610933</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Thu, 06 Nov 2008 00:31:50 GMT</pubDate></item></channel></rss>