<?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[Was ist der ganze Sinn von Konstanten? (const)]]></title><description><![CDATA[<p>hi</p>
<p>Wenn es nicht verändert werden soll, dann greift einfach nicht auf diese zu.<br />
Wozu ist das Schlüsselwort Konstante gut, außer dass ein bißchen mehr Fehlermeldungen rauskommen könnte, wenn man auf diese zugreifen will?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/183280/was-ist-der-ganze-sinn-von-konstanten-const</link><generator>RSS for Node</generator><lastBuildDate>Wed, 23 Sep 2026 04:47:40 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/183280.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 03 Jun 2007 16:04:33 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Was ist der ganze Sinn von Konstanten? (const) on Sun, 03 Jun 2007 16:04:33 GMT]]></title><description><![CDATA[<p>hi</p>
<p>Wenn es nicht verändert werden soll, dann greift einfach nicht auf diese zu.<br />
Wozu ist das Schlüsselwort Konstante gut, außer dass ein bißchen mehr Fehlermeldungen rauskommen könnte, wenn man auf diese zugreifen will?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1297870</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1297870</guid><dc:creator><![CDATA[x]]></dc:creator><pubDate>Sun, 03 Jun 2007 16:04:33 GMT</pubDate></item><item><title><![CDATA[Reply to Was ist der ganze Sinn von Konstanten? (const) on Sun, 03 Jun 2007 16:10:31 GMT]]></title><description><![CDATA[<p>Das hat mehrere Zwecke: Erhöhte Sicherheit (du kannst das erzwingen, was du in der Doku forderst) und der Compiler kann besser optimieren (konstanten immediate laden und nicht aus dem RAM zB).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1297877</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1297877</guid><dc:creator><![CDATA[rüdiger]]></dc:creator><pubDate>Sun, 03 Jun 2007 16:10:31 GMT</pubDate></item><item><title><![CDATA[Reply to Was ist der ganze Sinn von Konstanten? (const) on Sun, 03 Jun 2007 16:12:35 GMT]]></title><description><![CDATA[<p>Fazit:<br />
const-correctness macht das C++ Typsystem noch strenger. Und je strenger die Typprüfung, desto mehr Fehler können bereits zur Compilezeit entdeckt werden. Jeder Fehler der zur Compilzeit gefunden wird, ist einer weniger nach dem zur Laufzeit gesucht werden muss.</p>
<p>Von <a href="http://fara.cs.uni-potsdam.de/~kaufmann/?page=GenCppFaqs&amp;faq=constcor#Answ" rel="nofollow">http://fara.cs.uni-potsdam.de/~kaufmann/?page=GenCppFaqs&amp;faq=constcor#Answ</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1297879</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1297879</guid><dc:creator><![CDATA[The-Kenny]]></dc:creator><pubDate>Sun, 03 Jun 2007 16:12:35 GMT</pubDate></item><item><title><![CDATA[Reply to Was ist der ganze Sinn von Konstanten? (const) on Sun, 03 Jun 2007 16:19:11 GMT]]></title><description><![CDATA[<p>okay ich verstehe. danke!</p>
<p>es gibt halt den code aus dem buch c++ lernen und professionel anwenden:</p>
<pre><code class="language-cpp">CD( const string&amp; i=&quot;&quot;, const string&amp; t=&quot;&quot;, long s = 0L)
     { 
        interpret = i;    title = t;    seconds = s;
     }
</code></pre>
<p>da frag ich mich warum long s keine konstante ist, aber die beiden strings schon.</p>
<p>ob ich jetzt da draus konstante mache (const long&amp; s = 0L) oder von den strings wegmache, beides funktioniert. Warum hat nur das dritte argument keine konstante?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1297886</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1297886</guid><dc:creator><![CDATA[x]]></dc:creator><pubDate>Sun, 03 Jun 2007 16:19:11 GMT</pubDate></item><item><title><![CDATA[Reply to Was ist der ganze Sinn von Konstanten? (const) on Sun, 03 Jun 2007 16:29:13 GMT]]></title><description><![CDATA[<p>x schrieb:</p>
<blockquote>
<p>da frag ich mich warum long s keine konstante ist, aber die beiden strings schon.</p>
<p>ob ich jetzt da draus konstante mache (const long&amp; s = 0L) oder von den strings wegmache, beides funktioniert. Warum hat nur das dritte argument keine konstante?</p>
</blockquote>
<p>Was an diesem Code wichtig ist, ist die Tatsache, dass die Strings als Referenz übergeben werden. Das ist gut, denn dadurch müssen sie nicht kopiert werden. Wenn man sie nun *nicht* als 'const' übergeben würde, könnte man aber z.B. folgenden Code nicht schreiben:</p>
<pre><code class="language-cpp">CD(&quot;hallo&quot;, &quot;du&quot;, 0);
</code></pre>
<p>Denn '&quot;hallo&quot;' und '&quot;du&quot;' sind *keine* Strings sondern 'char const*'. Diese können zwar implizit in Strings konvertiert werden, aber nur, wenn diese Strings konstant sind. Daher sind die String-Referenzen als 'const' übergeben. Der Long-Parameter hingegen nicht, denn dort ist es nutzlos: Das 'long' wird bei der Übergabe eh kopiert, d.h. selbst wenn man es in der Funktion verändert, wirkt sich dies nicht auf den übergebenen Wert auf: Er bleibt unverändert. Daher kann ich auch konstante Long-Werte an die Funktion übergeben, ohne den Parameter als 'const' deklariert zu haben.</p>
<p>Hätte man stattdessen eine 'long'-Referenz übergeben, hätte man diese auch 'const' machen müssen, um Konstanten als Parameter verwenden zu können. Allerdings ist es relativ sinnlos, ein 'long' per Referenz zu übergeben, denn ein 'long' bei der Parameter-Übegabe zu kopieren, ist billig. Strings zu kopieren hingegen ist teuer (wobei ich mir nicht sicher bin, was C++ hier mit 'char const*' macht; es könnte sein, dass die trotzdem von 'string'-Konstruktor kopiert werden).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1297893</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1297893</guid><dc:creator><![CDATA[Konrad Rudolph]]></dc:creator><pubDate>Sun, 03 Jun 2007 16:29:13 GMT</pubDate></item><item><title><![CDATA[Reply to Was ist der ganze Sinn von Konstanten? (const) on Sun, 03 Jun 2007 16:54:06 GMT]]></title><description><![CDATA[<p>Wobei in dem Beispiel das eher so gemacht würde:</p>
<pre><code class="language-cpp">CD(const std::string&amp; interpret, const std::string&amp; title, long playtime) : m_interpret(interpret), m_title(title), m_seconds(playtime)
{
}
</code></pre>
<p><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/1297906</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1297906</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Sun, 03 Jun 2007 16:54:06 GMT</pubDate></item><item><title><![CDATA[Reply to Was ist der ganze Sinn von Konstanten? (const) on Sun, 03 Jun 2007 18:52:25 GMT]]></title><description><![CDATA[<p>hi! danke für die ausführliche Erklärung, danke für die mühe!</p>
<blockquote>
<p>&quot;Allerdings ist es relativ sinnlos, ein 'long' per Referenz zu übergeben, denn ein 'long' bei der Parameter-Übegabe zu kopieren, ist billig.&quot;</p>
</blockquote>
<p>Ohne Referenz heisst aber schon dass man einmal auf s kopieren muss und dann nochmal auf seconds, oder? wenn die Objekte ganz viel erzeugt werden, wird das schon bemerklich sein? Oder optimiert das der Compiler weg?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1297975</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1297975</guid><dc:creator><![CDATA[x]]></dc:creator><pubDate>Sun, 03 Jun 2007 18:52:25 GMT</pubDate></item><item><title><![CDATA[Reply to Was ist der ganze Sinn von Konstanten? (const) on Sun, 03 Jun 2007 18:53:42 GMT]]></title><description><![CDATA[<p>@(D)Evil: Ja das mit Elementinitialisierer muss ich nochmal lesen. Ich lerne eben C++. Verwirrt mich alles bei sovielen Möglichkeiten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1297979</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1297979</guid><dc:creator><![CDATA[x]]></dc:creator><pubDate>Sun, 03 Jun 2007 18:53:42 GMT</pubDate></item><item><title><![CDATA[Reply to Was ist der ganze Sinn von Konstanten? (const) on Sun, 03 Jun 2007 18:58:40 GMT]]></title><description><![CDATA[<p>x schrieb:</p>
<blockquote>
<p>hi! danke für die ausführliche Erklärung, danke für die mühe!</p>
<blockquote>
<p>&quot;Allerdings ist es relativ sinnlos, ein 'long' per Referenz zu übergeben, denn ein 'long' bei der Parameter-Übegabe zu kopieren, ist billig.&quot;</p>
</blockquote>
<p>Ohne Referenz heisst aber schon dass man einmal auf s kopieren muss und dann nochmal auf seconds, oder?</p>
</blockquote>
<p>Ja, aber wenn Du es per Referenz übergibst, muss die Referenz auf dem Stack abgelegt werden, d.h. dadurch sparst Du nichts.</p>
<blockquote>
<p>Oder optimiert das der Compiler weg?</p>
</blockquote>
<p>Mit den entsprechenden Einstellungen optimiert der Compiler extrem viel weg; aber um dieses Kopieren wegzuoptimieren müsste der gesamte Methodenaufruf ge-inlined werden, eine andere Möglichkeit gibt es nicht. Allerdings klappt gerade Inlining sehr gut.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1297983</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1297983</guid><dc:creator><![CDATA[Konrad Rudolph]]></dc:creator><pubDate>Sun, 03 Jun 2007 18:58:40 GMT</pubDate></item><item><title><![CDATA[Reply to Was ist der ganze Sinn von Konstanten? (const) on Sun, 03 Jun 2007 18:59:26 GMT]]></title><description><![CDATA[<p>x schrieb:</p>
<blockquote>
<p>hi! danke für die ausführliche Erklärung, danke für die mühe!</p>
<blockquote>
<p>&quot;Allerdings ist es relativ sinnlos, ein 'long' per Referenz zu übergeben, denn ein 'long' bei der Parameter-Übegabe zu kopieren, ist billig.&quot;</p>
</blockquote>
<p>Ohne Referenz heisst aber schon dass man einmal auf s kopieren muss und dann nochmal auf seconds, oder? wenn die Objekte ganz viel erzeugt werden, wird das schon bemerklich sein? Oder optimiert das der Compiler weg?</p>
</blockquote>
<p>Built-in Typen zu kopieren ist billig. Das ist eine CPU-Anweisung, die du ohnehin machen müsstest. Eine Referenz hätte in dem Fall nur einen zusätzlichen Overhead.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1297984</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1297984</guid><dc:creator><![CDATA[rüdiger]]></dc:creator><pubDate>Sun, 03 Jun 2007 18:59:26 GMT</pubDate></item><item><title><![CDATA[Reply to Was ist der ganze Sinn von Konstanten? (const) on Sun, 03 Jun 2007 23:57:46 GMT]]></title><description><![CDATA[<p>danke an rest</p>
<p>(D)Evil schrieb:</p>
<blockquote>
<p>Wobei in dem Beispiel das eher so gemacht würde:</p>
<pre><code class="language-cpp">CD(const std::string&amp; interpret, const std::string&amp; title, long playtime) : m_interpret(interpret), m_title(title), m_seconds(playtime)
{
}
</code></pre>
<p><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>wo sind dann die vordefinierten werte? geht das so auch: ?</p>
<pre><code class="language-cpp">CD(const std::string&amp; interpret = &quot;&quot;, const std::string&amp; title = &quot;&quot;, long playtime = 0L) : m_interpret(interpret), m_title(title), m_seconds(playtime)
{
}
</code></pre>
<p>ich frage nur dumm. vielleicht gibt es einen grund warum du das weggemacht hast? performance?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1298158</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1298158</guid><dc:creator><![CDATA[x]]></dc:creator><pubDate>Sun, 03 Jun 2007 23:57:46 GMT</pubDate></item><item><title><![CDATA[Reply to Was ist der ganze Sinn von Konstanten? (const) on Mon, 04 Jun 2007 00:03:25 GMT]]></title><description><![CDATA[<p>hat er vermutlich nur übersehen. Geht natürlich auch so.</p>
<p>btw. brecht bitte die Zeilen rechtzeitig um, ist ja schrecklich! <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 denk nicht bei jeder Kleinigkeit an &quot;Performance&quot;!)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1298160</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1298160</guid><dc:creator><![CDATA[rüdiger]]></dc:creator><pubDate>Mon, 04 Jun 2007 00:03:25 GMT</pubDate></item></channel></rss>