<?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[const bei typedefs auf Zeigern]]></title><description><![CDATA[<p>Ich habe folgendes typedef:</p>
<pre><code class="language-cpp">typedef int *IntPointer;
</code></pre>
<p>Wenn ich jetzt folgendes schreibe:</p>
<pre><code class="language-cpp">int value = 3;
const IntPointer pointer = &amp;value;
</code></pre>
<p>dann ist Zeile 2 identisch mit</p>
<pre><code class="language-cpp">int * const pointer = &amp;value;
</code></pre>
<p>Das heißt: Der int-Wert würde sich zwar verändern lassen, aber der Zeiger nicht auf eine andere Adresse umbiegen.<br />
Ich will mit dem selbstdefinierten Typ aber etwas deklarieren, das folgendem entspricht:</p>
<pre><code class="language-cpp">const int *pointer = &amp;value;
</code></pre>
<p>Also: Der int-Wert ist unveränderlich, aber der Zeiger kann auf eine andere Adresse geändert werden.<br />
Das hier soll gehen:</p>
<pre><code class="language-cpp">int otherValue = 20;
pointer = otherValue;
</code></pre>
<p>Aber das hier nicht:</p>
<pre><code class="language-cpp">*pointer = 5
</code></pre>
<p>Wie mache ich das mit dem selbstdefinierten Typ, ohne dass ich direkt mit [c]int *[/cp] arbeite?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/285596/const-bei-typedefs-auf-zeigern</link><generator>RSS for Node</generator><lastBuildDate>Fri, 21 Aug 2026 06:53:23 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/285596.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 24 Apr 2011 10:23:47 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to const bei typedefs auf Zeigern on Sun, 24 Apr 2011 10:23:47 GMT]]></title><description><![CDATA[<p>Ich habe folgendes typedef:</p>
<pre><code class="language-cpp">typedef int *IntPointer;
</code></pre>
<p>Wenn ich jetzt folgendes schreibe:</p>
<pre><code class="language-cpp">int value = 3;
const IntPointer pointer = &amp;value;
</code></pre>
<p>dann ist Zeile 2 identisch mit</p>
<pre><code class="language-cpp">int * const pointer = &amp;value;
</code></pre>
<p>Das heißt: Der int-Wert würde sich zwar verändern lassen, aber der Zeiger nicht auf eine andere Adresse umbiegen.<br />
Ich will mit dem selbstdefinierten Typ aber etwas deklarieren, das folgendem entspricht:</p>
<pre><code class="language-cpp">const int *pointer = &amp;value;
</code></pre>
<p>Also: Der int-Wert ist unveränderlich, aber der Zeiger kann auf eine andere Adresse geändert werden.<br />
Das hier soll gehen:</p>
<pre><code class="language-cpp">int otherValue = 20;
pointer = otherValue;
</code></pre>
<p>Aber das hier nicht:</p>
<pre><code class="language-cpp">*pointer = 5
</code></pre>
<p>Wie mache ich das mit dem selbstdefinierten Typ, ohne dass ich direkt mit [c]int *[/cp] arbeite?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2053508</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2053508</guid><dc:creator><![CDATA[Bauer]]></dc:creator><pubDate>Sun, 24 Apr 2011 10:23:47 GMT</pubDate></item><item><title><![CDATA[Reply to const bei typedefs auf Zeigern on Sun, 24 Apr 2011 10:51:48 GMT]]></title><description><![CDATA[<p>dann typedef dir doch einen constanten zeiger bzw einen zeiger auf was constantes...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2053520</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2053520</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Sun, 24 Apr 2011 10:51:48 GMT</pubDate></item><item><title><![CDATA[Reply to const bei typedefs auf Zeigern on Sun, 24 Apr 2011 11:28:36 GMT]]></title><description><![CDATA[<p>Bauer schrieb:</p>
<blockquote>
<p>Wie mache ich das mit dem selbstdefinierten Typ, ohne dass ich direkt mit <code>int *</code> arbeite?</p>
</blockquote>
<p>Warum denn überhaupt? Wenn's sich noch um rohe Zeiger handelt, kann man es natürlich mit TypeTraits machen:</p>
<pre><code class="language-cpp">typedef int* intptr;
typedef remove_pointer&lt;intptr&gt;::type const* constintptr;
</code></pre>
<p>Einfacher und praktischer ist da schon ein zweiter typedef. Das ist eben so mit dem Typsystem. Ich behaupte sogar, dass es sich ganz normal ergibt und keine künstliche Schwäche von C++ ist. Alles andere ist mir höchst suspekt (zB die D Entwickler, die mit &quot;transitivem const&quot; Werbung machen. Was für ein Schwachsinn *kopfschüttel*). Wenn Du zwei Typen brauchst, definiere zwei Typen und versuche nicht zwei Typen (zB iterator und const_iterator) in einem zu vereinen. Das funzt einfach konzeptionell gar nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2053528</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2053528</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Sun, 24 Apr 2011 11:28:36 GMT</pubDate></item><item><title><![CDATA[Reply to const bei typedefs auf Zeigern on Sun, 24 Apr 2011 11:41:56 GMT]]></title><description><![CDATA[<p>Gibt es denn eine Möglichkeit, beide typedefs (mit und ohne const) so zu deklarieren, dass der Ursprungsdatentyp nicht doppelt erscheinen muss? Weil, wenn ich folgendes schreibe:</p>
<pre><code class="language-cpp">typedef int *IntPointer;
typedef const int *ConstIntPointer;
</code></pre>
<p>dann steht ja das int zweimal da. Das heißt, würde <em>int</em> irgendwann mal zu <code>unsigned char far</code> werden, müsste ich das an zwei Stellen ändern. Gibt es also eine Möglichkeit, den ConstIntPointer direkt aus dem IntPointer zu deklarieren, ohne dort nochmal int hinschreiben zu müssen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2053529</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2053529</guid><dc:creator><![CDATA[Bauer]]></dc:creator><pubDate>Sun, 24 Apr 2011 11:41:56 GMT</pubDate></item><item><title><![CDATA[Reply to const bei typedefs auf Zeigern on Sun, 24 Apr 2011 11:56:39 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">typedef int* IntPointer;
typedef const IntPointer ConstIntPointer;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2053536</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2053536</guid><dc:creator><![CDATA[EOutOfResources]]></dc:creator><pubDate>Sun, 24 Apr 2011 11:56:39 GMT</pubDate></item><item><title><![CDATA[Reply to const bei typedefs auf Zeigern on Sun, 24 Apr 2011 12:38:15 GMT]]></title><description><![CDATA[<p>EOutOfResources schrieb:</p>
<blockquote>
<pre><code class="language-cpp">typedef int* IntPointer;
typedef const IntPointer ConstIntPointer;
</code></pre>
</blockquote>
<p>Das wäre ein konstanter int-Zeiger<br />
und kein const-int Zeiger.</p>
<p>Also.... FAIL!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2053546</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2053546</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Sun, 24 Apr 2011 12:38:15 GMT</pubDate></item><item><title><![CDATA[Reply to const bei typedefs auf Zeigern on Sun, 24 Apr 2011 12:45:50 GMT]]></title><description><![CDATA[<p>krümelkacker schrieb:</p>
<blockquote>
<p>Das wäre ein konstanter int-Zeiger<br />
und kein const-int Zeiger.</p>
<p>Also.... FAIL!</p>
</blockquote>
<p>Macht also der Compiler kein inplace?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2053550</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2053550</guid><dc:creator><![CDATA[EOutOfResources]]></dc:creator><pubDate>Sun, 24 Apr 2011 12:45:50 GMT</pubDate></item><item><title><![CDATA[Reply to const bei typedefs auf Zeigern on Sun, 24 Apr 2011 14:27:55 GMT]]></title><description><![CDATA[<p>Lies das:<br />
<a href="http://www.c-plusplus.net/forum/p2003525#2003525" rel="nofollow">http://www.c-plusplus.net/forum/p2003525#2003525</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2053586</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2053586</guid><dc:creator><![CDATA[wxSkip]]></dc:creator><pubDate>Sun, 24 Apr 2011 14:27:55 GMT</pubDate></item><item><title><![CDATA[Reply to const bei typedefs auf Zeigern on Sun, 24 Apr 2011 14:57:27 GMT]]></title><description><![CDATA[<p>krümelkacker schrieb:</p>
<blockquote>
<p>Alles andere ist mir höchst suspekt (zB die D Entwickler, die mit &quot;transitivem const&quot; Werbung machen. Was für ein Schwachsinn *kopfschüttel*).</p>
</blockquote>
<p>Hab ich soeben kurz angeschaut, ich kann mich dir nur anschliessen. D ist mir ohnehin recht suspekt. Ist halt auch eine Sprache, die alles &quot;besser&quot; als C++ macht <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>EOutOfResources schrieb:</p>
<blockquote>
<p>Macht also der Compiler kein inplace?</p>
</blockquote>
<p>Wäre ziemlich bescheuert, wenn er das tun würde. Wenn ich <code>const T</code> schreibe, will ich ein konstantes <code>T</code> und nicht etwa ein veränderbares <code>T</code> , das auf ein konstantes Objekt zeigt. Ist übrigens auch ein Grund, wieso man für Typdefinitionen keine Makros nimmt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2053601</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2053601</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sun, 24 Apr 2011 14:57:27 GMT</pubDate></item><item><title><![CDATA[Reply to const bei typedefs auf Zeigern on Sun, 24 Apr 2011 15:10:17 GMT]]></title><description><![CDATA[<p>Denkbar:</p>
<pre><code class="language-cpp">typedef int              ValueType;
typedef ValueType       *ValuePointer;
typedef ValueType const *ValueConstPointer;
</code></pre>
<p>Da die typedefs allerdings aller Wahrscheinlichkeit nach direkt untereinander im selben Header stehen werden, hielte ich es auch nicht für unglaublich kritisch, wenn da zweimal int stünde.</p>
<p>Ach ja, D. Das uneheliche Kind von Python und C++ und genau das, was die Welt nicht gebraucht hat. Wusstet ihr, dass derzeitige D-Implementationen ihre Speicherverwaltung einer Heuristik anvertrauen? Ich finde diese Sprache echt komisch.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2053605</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2053605</guid><dc:creator><![CDATA[seldon]]></dc:creator><pubDate>Sun, 24 Apr 2011 15:10:17 GMT</pubDate></item><item><title><![CDATA[Reply to const bei typedefs auf Zeigern on Sun, 24 Apr 2011 18:57:51 GMT]]></title><description><![CDATA[<p>seldon schrieb:</p>
<blockquote>
<p>Wusstet ihr, dass derzeitige D-Implementationen ihre Speicherverwaltung einer Heuristik anvertrauen?</p>
</blockquote>
<p><a href="http://www.facepalm.de/images/facepalm.jpg" rel="nofollow">Klick</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2053685</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2053685</guid><dc:creator><![CDATA[EOutOfResources]]></dc:creator><pubDate>Sun, 24 Apr 2011 18:57:51 GMT</pubDate></item><item><title><![CDATA[Reply to const bei typedefs auf Zeigern on Sun, 24 Apr 2011 20:32:28 GMT]]></title><description><![CDATA[<p>seldon schrieb:</p>
<blockquote>
<p>Wusstet ihr, dass derzeitige D-Implementationen ihre Speicherverwaltung einer Heuristik anvertrauen?</p>
</blockquote>
<p>Faszinierend... Hast du zufällig einen guten Link zu dem Thema?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2053711</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2053711</guid><dc:creator><![CDATA[dooooomi]]></dc:creator><pubDate>Sun, 24 Apr 2011 20:32:28 GMT</pubDate></item><item><title><![CDATA[Reply to const bei typedefs auf Zeigern on Sun, 24 Apr 2011 23:06:03 GMT]]></title><description><![CDATA[<p>seldon schrieb:</p>
<blockquote>
<p>Wusstet ihr, dass derzeitige D-Implementationen ihre Speicherverwaltung einer Heuristik anvertrauen?</p>
</blockquote>
<p>Gerüchteweise gibt es eine andere enorm erfolgreiche Sprache, die das genau so macht.</p>
<p>Die Sprache heißt Java.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2053777</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2053777</guid><dc:creator><![CDATA[otze]]></dc:creator><pubDate>Sun, 24 Apr 2011 23:06:03 GMT</pubDate></item><item><title><![CDATA[Reply to const bei typedefs auf Zeigern on Mon, 25 Apr 2011 03:05:58 GMT]]></title><description><![CDATA[<p>Java hat deutlich komplexere Zeiger als wir es von C und C++ gewohnt sind, und jedes Objekt schleppt Informationen für den Garbage-Collector mit. Das erlaubt die Implementation eines präzisen Garbage-Collectors im Gegensatz zu einem heuristischen.</p>
<p>In D ist das nicht der Fall, und das ist ein echtes Problem für eine Sprache, die sich auf ihren GC verlässt. Hier wird der Stack nach Werten durchsucht, die ein Zeiger sein <em>könnten</em> und Deallokation unter Umständen ewig verzögert. Das Szenario ist auch auf Plattformen mit breiten Zeigern weit weniger unwahrscheinlich, als man zunächst vermuten könnte - nehmt beispielsweise</p>
<pre><code class="language-cpp">void foo() {
  char *s = new char[1000000]; // Ich verlasse mich auf Garbage-Collection
  int data[100];
}

void bar() {
  int data[100]; // Hiervon werden in der Praxis höchstens die ersten 80 benutzt
  while(true) {
    do_server_stuff();
  }
}

int main() {
  foo();
  bar();
}
</code></pre>
<p>...und da bei einem nach unten wachsenden Stack der ehemalige Speicherort von s in foo am üblicherweise unbenutzten Ende von data in bar liegt, kriege ich das Megabyte Speicher niemals wieder.</p>
<p>Ganz zu schweigen von komplexeren Adressierungsmethoden wie XOR-verlinkten Listen.</p>
<p>Jetzt ist Javas Garbage-Collection nicht frei von Problemen - an die genannte XOR-verlinkte Liste beispielsweise ist in Java gar nicht zu denken - aber um eine Heuristik handelt es sich dabei nicht. Sonst wäre Java wohl auch nicht so erfolgreich.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2053796</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2053796</guid><dc:creator><![CDATA[seldon]]></dc:creator><pubDate>Mon, 25 Apr 2011 03:05:58 GMT</pubDate></item></channel></rss>