<?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_cast]]></title><description><![CDATA[<p>hi, ist folgender code laut c++ standard gültig?</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
using namespace std;

void print (char * str)
{
  cout &lt;&lt; str &lt;&lt; endl;
}

int main () {
  const char * c = &quot;sample text&quot;;
  print ( const_cast&lt;char *&gt; (c) );
  return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/156340/const_cast</link><generator>RSS for Node</generator><lastBuildDate>Tue, 08 Sep 2026 19:43:11 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/156340.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 16 Aug 2006 02:20:13 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to const_cast on Wed, 16 Aug 2006 02:20:13 GMT]]></title><description><![CDATA[<p>hi, ist folgender code laut c++ standard gültig?</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
using namespace std;

void print (char * str)
{
  cout &lt;&lt; str &lt;&lt; endl;
}

int main () {
  const char * c = &quot;sample text&quot;;
  print ( const_cast&lt;char *&gt; (c) );
  return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1117943</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1117943</guid><dc:creator><![CDATA[mondscheinprogger]]></dc:creator><pubDate>Wed, 16 Aug 2006 02:20:13 GMT</pubDate></item><item><title><![CDATA[Reply to const_cast on Wed, 16 Aug 2006 04:03:37 GMT]]></title><description><![CDATA[<p>Ich seh keinen Grund warum er nicht standardkonform sein sollte.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1117953</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1117953</guid><dc:creator><![CDATA[bluecode]]></dc:creator><pubDate>Wed, 16 Aug 2006 04:03:37 GMT</pubDate></item><item><title><![CDATA[Reply to const_cast on Wed, 16 Aug 2006 05:23:55 GMT]]></title><description><![CDATA[<p>Ich sehe keinen Grund der dagegen spricht sich den beknakkten Cast einfach zu sparen.</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
using namespace std;

void print (const char * str)
{
  cout &lt;&lt; str &lt;&lt; endl;
}

int main () {
  const char * c = &quot;sample text&quot;;
  print ( c );
  return 0;
}
</code></pre>
<p>grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1117959</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1117959</guid><dc:creator><![CDATA[David_pb]]></dc:creator><pubDate>Wed, 16 Aug 2006 05:23:55 GMT</pubDate></item><item><title><![CDATA[Reply to const_cast on Wed, 16 Aug 2006 06:12:12 GMT]]></title><description><![CDATA[<p>der code ist nach standard gültig.<br />
anders sähe es aus, wenn man versucht hätte, den string zu beschreiben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1117976</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1117976</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Wed, 16 Aug 2006 06:12:12 GMT</pubDate></item><item><title><![CDATA[Reply to const_cast on Wed, 16 Aug 2006 08:58:16 GMT]]></title><description><![CDATA[<p>mondscheinprogger schrieb:</p>
<blockquote>
<p>hi, ist folgender code laut c++ standard gültig?</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
using namespace std;

void print (char * str)
{
  cout &lt;&lt; str &lt;&lt; endl;
}

int main () {
  const char * c = &quot;sample text&quot;;
  print ( const_cast&lt;char *&gt; (c) );
  return 0;
}
</code></pre>
</blockquote>
<p>Ja, aber warum sollte man das tun ?<br />
Prinzipiell bedeutet die Verwendung von const_cast einen Designfehler ... der in ganz seltenen Fällen unumgänglich/das geringere Übel bedeutet. Das trifft auf Deinen Code aber nicht zu. Außerdem ist ein const_cast eine gefährliche Sache, weil sie schnell zu ganz häßlichen (bisweilen nicht reproduzierbaren) Fehlern/Abstürzen/... führen kann.<br />
In den allermeisten Fällen kann man durch einen wrapper, der eine temporäre Kopie anlegt, so ein Problem sauber loswerden:</p>
<pre><code class="language-cpp">void print_const (const char * str)
{
    const size_t s_len = strlen(str);
    char* s = new char[s_len+1];
    strncpy(s, str, s_len);	
    print(s);
    delete[] s;
    // Mögliche Veränderungen von str durch print() werden verworfen
    // Achtung ! Das Teil ist noch nicht ressourcensicher (exceptions, ...)
    // muß man noch machen (try/catch oder scope-Überwacher), ist aber nicht Thema dieses Threads
}

}
</code></pre>
<p>Du kannst dann immer print_const() aufrufen (funktioniert ja auch mit &quot;nicht-const's&quot; (jedenfalls in C++) ) und brauchst Dich um die &quot;const-ness Deines Parameters keinen Kopf mehr zu machen. Schicker ist es natürlich noch mit spezialisierten Funktionstemplates, aber das ist komplizierter und oftmals &quot;unnecessary cleverness&quot; <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>volkard schrieb:</p>
<blockquote>
<p>der code ist nach standard gültig.<br />
anders sähe es aus, wenn man versucht hätte, den string zu beschreiben.</p>
</blockquote>
<p>Naja, wenn er in print in str beschreibt, ist der Code (leider) auch noch gültig, dürfte aber unschönes Verhalten an den Tag legen. <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>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1118007</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1118007</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Wed, 16 Aug 2006 08:58:16 GMT</pubDate></item><item><title><![CDATA[Reply to const_cast on Wed, 16 Aug 2006 07:19:51 GMT]]></title><description><![CDATA[<p>Dass bei sowas immer gleich zig Leute nach dem Sinn fahnden müssen <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>Ist Euch noch nie eine schlampige C-API untergekommen, die grundsätzlich ohne const arbeitet? Nein? Mir schon (und zwar regelmäßig). Manchmal geht's halt nicht anders <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>Prominentes Beispiel: GD</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/13624">@Simon2</a>:<br />
Was ist denn an c_str() bitte weniger const als an const char*? <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/1118020</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1118020</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Wed, 16 Aug 2006 07:19:51 GMT</pubDate></item><item><title><![CDATA[Reply to const_cast on Wed, 16 Aug 2006 08:54:33 GMT]]></title><description><![CDATA[<p>LordJaxom schrieb:</p>
<blockquote>
<p>...<br />
Ist Euch noch nie eine schlampige C-API untergekommen, die grundsätzlich ohne const arbeitet? Nein? Mir schon (und zwar regelmäßig).</p>
</blockquote>
<p>Mir auch, aber wenn jemand nach der Syntax von const_cast fragt, hat er vielleicht noch nicht vo den Problemen damit gehört und deshalb halte ich eine &quot;kleine Aufklärung&quot; für durchaus legitim. <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>LordJaxom schrieb:</p>
<blockquote>
<p>...<br />
Was ist denn an c_str() bitte weniger const als an const char*? <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>
</blockquote>
<p>*Stirnklopf* Hups, hast natürlich Recht. Hatte erst eine char*-Variante geschrieben und kam dann standardmäßig auf &quot;Warum nicht mit String ?&quot; ....<br />
Naja, ich korrigier's mal - Danke für den Hinweis.</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1118075</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1118075</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Wed, 16 Aug 2006 08:54:33 GMT</pubDate></item></channel></rss>