<?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[&#x27;const int&#x27; durch &#x27;const_cast&#x27; ändern]]></title><description><![CDATA[<p>Hallo</p>
<p>Der Titel erscheint vll. etwas unpassend, viel mir aber nicht besser ein, sry ^^</p>
<p>Also, eigentlich habe ich nur einen Test gemacht, und zwar folgenden:</p>
<pre><code class="language-cpp">void func(int *ptr) {
	*ptr = 200;
}

int main() {

	const int n = 100;
	const int *p = &amp;n;

	cout &lt;&lt; n &lt;&lt; endl; // Ausgabe 100
	cout &lt;&lt; *p &lt;&lt; endl; // Ausgabe 100

	func(const_cast&lt;int*&gt;(p));
	cout &lt;&lt; n &lt;&lt; endl; // Ausgabe 100
	cout &lt;&lt; *p &lt;&lt; endl; // Ausgabe 200

	return(0);
}
</code></pre>
<p>Mir ist bewusst, dass das so nicht besonders viel Sinn ergibt und man sogar vll. gar nicht machen sollte/dürfte. Aber es erstaunt mich trotzdem, dass *p nach dem Aufruf der Funktion 200 ergibt und n 100. Ich habe nochmals die Adressen verglichen (&amp;n == p) und trotzdem ergibt n weiterhin 100 während *p den neuen Wert erhalten hatt <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
<p>Das irritiert mir jetzt. Kann mir vll. jemand erklären was da nun passiert <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
<p>Bin sehr dankbar!</p>
<p>Gruss,<br />
LEARNcpp</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/297065/const-int-durch-const_cast-ändern</link><generator>RSS for Node</generator><lastBuildDate>Fri, 14 Aug 2026 14:32:11 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/297065.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 18 Dec 2011 14:51:47 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to &#x27;const int&#x27; durch &#x27;const_cast&#x27; ändern on Sun, 18 Dec 2011 14:51:47 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>Der Titel erscheint vll. etwas unpassend, viel mir aber nicht besser ein, sry ^^</p>
<p>Also, eigentlich habe ich nur einen Test gemacht, und zwar folgenden:</p>
<pre><code class="language-cpp">void func(int *ptr) {
	*ptr = 200;
}

int main() {

	const int n = 100;
	const int *p = &amp;n;

	cout &lt;&lt; n &lt;&lt; endl; // Ausgabe 100
	cout &lt;&lt; *p &lt;&lt; endl; // Ausgabe 100

	func(const_cast&lt;int*&gt;(p));
	cout &lt;&lt; n &lt;&lt; endl; // Ausgabe 100
	cout &lt;&lt; *p &lt;&lt; endl; // Ausgabe 200

	return(0);
}
</code></pre>
<p>Mir ist bewusst, dass das so nicht besonders viel Sinn ergibt und man sogar vll. gar nicht machen sollte/dürfte. Aber es erstaunt mich trotzdem, dass *p nach dem Aufruf der Funktion 200 ergibt und n 100. Ich habe nochmals die Adressen verglichen (&amp;n == p) und trotzdem ergibt n weiterhin 100 während *p den neuen Wert erhalten hatt <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
<p>Das irritiert mir jetzt. Kann mir vll. jemand erklären was da nun passiert <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
<p>Bin sehr dankbar!</p>
<p>Gruss,<br />
LEARNcpp</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2158365</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2158365</guid><dc:creator><![CDATA[LEARNcpp]]></dc:creator><pubDate>Sun, 18 Dec 2011 14:51:47 GMT</pubDate></item><item><title><![CDATA[Reply to &#x27;const int&#x27; durch &#x27;const_cast&#x27; ändern on Sun, 18 Dec 2011 14:55:38 GMT]]></title><description><![CDATA[<p>Der Compiler hat evtl. die Konstante n direkt geinlined im Code und konnte das dann für p doch nicht tun. Tu mal die Optimierungen anstellen und schau was dann passiert.</p>
<p>Dass der Code hier erlaubt/im Standard definiert ist kann ich mir jedenfalls nicht vorstellen. Wissen tu ich es aber nicht.</p>
<p>MfG SideWinder</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2158367</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2158367</guid><dc:creator><![CDATA[SideWinder]]></dc:creator><pubDate>Sun, 18 Dec 2011 14:55:38 GMT</pubDate></item><item><title><![CDATA[Reply to &#x27;const int&#x27; durch &#x27;const_cast&#x27; ändern on Sun, 18 Dec 2011 15:12:44 GMT]]></title><description><![CDATA[<p>Ich habe den Code nochmals mit der Compileroption (-od) compiliert. Ich verwende den GCC Compiler und habe vorhin nachgeschaut und entdeckt das mit -od alle Optimierungseinstellungen deaktiviert werden.</p>
<p>Kann es sein das der Compiler automatisch überall wo <em>n</em> aufgerufen wird, einfach mit <em>100</em> ersetzt. Ohne jedesmal den im Speicher nach zu schauen (da ja <em>n</em> theoretisch konstant ist)...!?!</p>
<blockquote>
<p>Dass der Code hier erlaubt/im Standard definiert ist kann ich mir jedenfalls nicht vorstellen. Wissen tu ich es aber nicht.</p>
</blockquote>
<p>Kann ich mir auch nicht vorstellen. Mir ist auch bewusst dass das so keinen Sinn macht. Es geht mir nur darum zu wissen, was da passiert <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>Vielen Dank für die Antwort!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2158373</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2158373</guid><dc:creator><![CDATA[LEARNcpp]]></dc:creator><pubDate>Sun, 18 Dec 2011 15:12:44 GMT</pubDate></item><item><title><![CDATA[Reply to &#x27;const int&#x27; durch &#x27;const_cast&#x27; ändern on Sun, 18 Dec 2011 15:15:26 GMT]]></title><description><![CDATA[<p>Wenn <code>const_cast</code> auf Variablen angewandt wird, die ursprünglich als <code>const</code> deklariert wurden (im Gegensatz zu Referenzen/Zeigern auf <code>const</code> ), ist das Verhalten des nachfolgenden Zugriffs undefiniert. Und zwar genau, um solche Optimierungen zu ermöglichen.</p>
<p>Ist aber selten ein Problem, da die Notwendigkeit dazu üblicherweise ein schlechtes Design voraussetzt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2158376</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2158376</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sun, 18 Dec 2011 15:15:26 GMT</pubDate></item><item><title><![CDATA[Reply to &#x27;const int&#x27; durch &#x27;const_cast&#x27; ändern on Sun, 18 Dec 2011 15:17:21 GMT]]></title><description><![CDATA[<p>Du rufst undefiniertes Verhalten hervor (&quot;U.B.&quot;, machst also etwas, dessen Verhalten nicht definiert ist). Daher kann da alles mögliche rauskommen. Mehr gibt es dazu nicht zu sagen. Du darfst eine &quot;Variable&quot;, die &quot;physisch konstant&quot; ist, nicht verändern. Punkt.</p>
<pre><code class="language-cpp">int main() {
  const int i = 42; // i ist &quot;physisch konstant&quot;
  const int *p = &amp;i;
  *const_cast&lt;int*&gt;(p) = 99; // Boom! U.B.
}
</code></pre>
<pre><code class="language-cpp">int main() {
  int i = 42;        // i ist nicht konstant
  const int *p = &amp;i; // p zeigt auf const-int
  *const_cast&lt;int*&gt;(p) = 99; // OK, da i nicht wirklich konstant ist.
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2158378</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2158378</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Sun, 18 Dec 2011 15:17:21 GMT</pubDate></item><item><title><![CDATA[Reply to &#x27;const int&#x27; durch &#x27;const_cast&#x27; ändern on Sun, 18 Dec 2011 15:17:45 GMT]]></title><description><![CDATA[<p>Dann ist das geklärt.<br />
Vielen Dank!</p>
<p>Gruss,<br />
LEARNcpp</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2158379</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2158379</guid><dc:creator><![CDATA[LEARNcpp]]></dc:creator><pubDate>Sun, 18 Dec 2011 15:17:45 GMT</pubDate></item></channel></rss>