<?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]]></title><description><![CDATA[<p>Hallo erstmal, ich bin ein Anfänger in Sachen C++<br />
Ich hab schon viele Funktionen gesehen die in den Parametern const stehen hatten.<br />
Ich schreibs immer ungefähr so</p>
<pre><code class="language-cpp">void funktion(char *t)
{
    //Tu irgendwas
}
</code></pre>
<p>Was ist denn da der Unterschied dazu</p>
<pre><code class="language-cpp">void funktion(const char *t)
{
    //Tu irgendwas
}
</code></pre>
<p>Oder gibts da überhaupt keinen Unterschied? <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>
]]></description><link>https://www.c-plusplus.net/forum/topic/194687/const</link><generator>RSS for Node</generator><lastBuildDate>Tue, 29 Sep 2026 15:11:35 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/194687.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 09 Oct 2007 20:17:15 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to const on Tue, 09 Oct 2007 20:17:15 GMT]]></title><description><![CDATA[<p>Hallo erstmal, ich bin ein Anfänger in Sachen C++<br />
Ich hab schon viele Funktionen gesehen die in den Parametern const stehen hatten.<br />
Ich schreibs immer ungefähr so</p>
<pre><code class="language-cpp">void funktion(char *t)
{
    //Tu irgendwas
}
</code></pre>
<p>Was ist denn da der Unterschied dazu</p>
<pre><code class="language-cpp">void funktion(const char *t)
{
    //Tu irgendwas
}
</code></pre>
<p>Oder gibts da überhaupt keinen Unterschied? <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1381597</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1381597</guid><dc:creator><![CDATA[EinAnfänger...]]></dc:creator><pubDate>Tue, 09 Oct 2007 20:17:15 GMT</pubDate></item><item><title><![CDATA[Reply to const on Tue, 09 Oct 2007 20:19:58 GMT]]></title><description><![CDATA[<p>const heißt Konstant, also unveränderbar. Aber in deinem Zusammenhang, ist es egal, da char* intern als const char* gehandhabt wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1381600</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1381600</guid><dc:creator><![CDATA[Fake oder Echt]]></dc:creator><pubDate>Tue, 09 Oct 2007 20:19:58 GMT</pubDate></item><item><title><![CDATA[Reply to const on Tue, 09 Oct 2007 20:36:17 GMT]]></title><description><![CDATA[<p>Also ist es nur zur Sicherheit, dass die Variable nicht aus Versehen geändert wird. Oder gibt's da noch einen anderen Grund?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1381617</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1381617</guid><dc:creator><![CDATA[EinAnfänger...]]></dc:creator><pubDate>Tue, 09 Oct 2007 20:36:17 GMT</pubDate></item><item><title><![CDATA[Reply to const on Tue, 09 Oct 2007 21:17:09 GMT]]></title><description><![CDATA[<p>BitWax schrieb:</p>
<blockquote>
<p>const heißt Konstant, also unveränderbar. Aber in deinem Zusammenhang, ist es egal, da char* intern als const char* gehandhabt wird.</p>
</blockquote>
<p>WTF?! Das ist ja totaler Schwachsinn... .</p>
<p>Im 1. Beispiel, kannst Du den Inhalt, auf den mit 't' zugegriffen wird, verändern; im 2. Beispiel geht das nicht <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/26a0.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--warning"
      title=":warning:"
      alt="⚠"
    /> . Man sollte -wenn möglich/sinnvoll- die 2. Möglichkeit bevorzugen.<br />
EDIT: Oder noch besser: Man verwendet die Klasse std::string <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="😉"
    /> .<br />
(Und übergibt dann so:</p>
<pre><code class="language-cpp">void foo(std::string&amp; strParam) { /* ... */ }
</code></pre>
<p>bzw. so:</p>
<pre><code class="language-cpp">void foo(const std::string&amp; strParam) { /* ... */ }
</code></pre>
<p>); also per Referenz.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1381633</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1381633</guid><dc:creator><![CDATA[CodeFinder]]></dc:creator><pubDate>Tue, 09 Oct 2007 21:17:09 GMT</pubDate></item><item><title><![CDATA[Reply to const on Tue, 09 Oct 2007 21:35:46 GMT]]></title><description><![CDATA[<p>EinAnfänger... schrieb:</p>
<blockquote>
<p>Also ist es nur zur Sicherheit, dass die Variable nicht aus Versehen geändert wird. Oder gibt's da noch einen anderen Grund?</p>
</blockquote>
<p>Genau das ist es, ist aber ein wirklich großer Vorteil! In seinen Programmen will man ja Bugs vermeiden und die sogenannte const-correctness von C++ ist ein wichtiges Konzept, wo vornherein Bugs ausgeschlossen werden.</p>
<p>Das ganze soll darauf hinauslaufen, ganz wie du schon erkannt hast, dass deine Variablen nicht einfach so verändert werden. Das klappt aber nicht nur mit normalen Variablen wie chars oder ints, sondern auch mit Klassen. Wenn eine Funktion einen Zeiger auf eine konstante Klasse entgegennimmt, kann sie auch nur die Methoden der Klasse aufrufen, die als &quot;const&quot; markiert sind:</p>
<pre><code class="language-cpp">// Du hast folgende Klasse:
class MeineKlasse
{
    public:
        void SetzeWert( int wert ) // Wird verändert
        {
            mein_wert = wert;
        }

        int VergreossereWert() // Wird verändert
        {
            mein_wert += 5;
        }

        int BekommeWert() const // Keine Variable der Klasse wird verändert
        {
            return mein_wert;
        }

    private:
        int mein_wert;
};

// Und so eine Funktion:
void MacheIrgendwas( const MeineKlasse* zeiger )
{
    zeiger-&gt;VergroessereWert(); // Klappt nicht, da nicht const
    int wert = zeiger-&gt;BekommeWert();
}
</code></pre>
<p>Und das geht sogar soweit, dass du nicht einfach hinter irgendeine Methode in deiner Klasse &quot;const&quot; schreiben kannst - wenn du darin eine Variable der Klasse änderst, merkt das der Compiler und du darfst die Methode nicht als const deklarieren.</p>
<p>Das gibt dir oft ein gutes Gefühl im Bauch. Sagen wir mal du programmierst mit deinem Kumpel zusammen irgendwas. Der entwirft eine Funktion wie die oben, die einen Zeiger auf &quot;MeineKlasse&quot; entgegennimmt. Und du hast in deinem Code eine Instanz (=Variable) der Klasse und rufst damit die Funktion auf.<br />
Wenn dein Kumpel sagt, er verändert die Klasse in seiner seiner Funktion nicht, dann kannst du ihm vertrauen, ooooder aber du sagst ihm, er soll (wie oben) in seiner Funktion angeben, dass die Klasse nicht verändert werden darf (&quot;const MeinKlasse* zeiger&quot;).</p>
<p>So, wenn du nun ein Objekt deiner Klasse hast, <strong>weißt</strong> du dann, dass es nach dem Funktionsaufruf unverändert ist, und eben das ist oft ungeheuer wichtig <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>
<pre><code class="language-cpp">MeineKlasse meins;
meins.SetzeWert( 100 );
meins.VergreossereWert();
// Die Variable &quot;mein_wert&quot; in &quot;meins&quot; ist jetzt 105
MethodeVonDeinemKumpel( &amp;meins );
// Und hier ist die Variable garantiert immer noch 105, ist das nicht schön? :)
</code></pre>
<p>Anstatt dass dein Kumpel Code schreibt, kannst du dir auch einfach vorstellen, dass du selber mal ne Funktion geschrieben hast (vor langer Zeit) und du gar nicht mehr genau weißt, ob sie den Parameter verändert oder nicht. Deshalb lieber kein Vertrauen sondern Kontrolle per const - aber halt überall da, wo das Objekt nicht verändert werden soll.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1381635</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1381635</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Tue, 09 Oct 2007 21:35:46 GMT</pubDate></item><item><title><![CDATA[Reply to const on Tue, 09 Oct 2007 22:46:05 GMT]]></title><description><![CDATA[<p>Oder du benutzt statt code von deinem Kumpel eine Bibliothek, von der du nur die Header kennst. Wenn dir die Deklarationen der Funktion zusichern, dass sie das Objekt nicht verändern, kannst du dich darauf verlassen und musst nicht mit bösen Überraschungen durch Nebeneffekte rechnen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1381652</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1381652</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Tue, 09 Oct 2007 22:46:05 GMT</pubDate></item><item><title><![CDATA[Reply to const on Wed, 10 Oct 2007 08:05:15 GMT]]></title><description><![CDATA[<p>CodeFinder schrieb:</p>
<blockquote>
<p>BitWax schrieb:</p>
<blockquote>
<p>const heißt Konstant, also unveränderbar. Aber in deinem Zusammenhang, ist es egal, da char* intern als const char* gehandhabt wird.</p>
</blockquote>
<p>WTF?! Das ist ja totaler Schwachsinn... .</p>
<p>Im 1. Beispiel, kannst Du den Inhalt, auf den mit 't' zugegriffen wird, verändern; im 2. Beispiel geht das nicht <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/26a0.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--warning"
      title=":warning:"
      alt="⚠"
    /> . Man sollte -wenn möglich/sinnvoll- die 2. Möglichkeit bevorzugen.<br />
EDIT: Oder noch besser: Man verwendet die Klasse std::string <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="😉"
    /> .<br />
(Und übergibt dann so:</p>
<pre><code class="language-cpp">void foo(std::string&amp; strParam) { /* ... */ }
</code></pre>
<p>bzw. so:</p>
<pre><code class="language-cpp">void foo(const std::string&amp; strParam) { /* ... */ }
</code></pre>
<p>); also per Referenz.</p>
</blockquote>
<p>hmmm...sry, war glaube ich zu sehr mit meinem tut beschäftigt <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1381768</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1381768</guid><dc:creator><![CDATA[Fake oder Echt]]></dc:creator><pubDate>Wed, 10 Oct 2007 08:05:15 GMT</pubDate></item></channel></rss>