<?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 correctness verständis]]></title><description><![CDATA[<p>hallo,</p>
<p>was hat es mit dem ganzen const auf sich? const correctness etc. ich kenne const nur als bezeichner um eine variable nicht änderbar zu machen. sprich:</p>
<pre><code>const int x = 34225;
//entspricht fast
#define x 34225
</code></pre>
<p>was kann man mit const noch machen und wofür</p>
<p>gruß :xmas1: <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/312397/const-correctness-verständis</link><generator>RSS for Node</generator><lastBuildDate>Sun, 02 Aug 2026 20:35:53 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/312397.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 03 Jan 2013 20:01:08 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to const correctness verständis on Thu, 03 Jan 2013 20:01:08 GMT]]></title><description><![CDATA[<p>hallo,</p>
<p>was hat es mit dem ganzen const auf sich? const correctness etc. ich kenne const nur als bezeichner um eine variable nicht änderbar zu machen. sprich:</p>
<pre><code>const int x = 34225;
//entspricht fast
#define x 34225
</code></pre>
<p>was kann man mit const noch machen und wofür</p>
<p>gruß :xmas1: <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/2285884</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2285884</guid><dc:creator><![CDATA[const wtf]]></dc:creator><pubDate>Thu, 03 Jan 2013 20:01:08 GMT</pubDate></item><item><title><![CDATA[Reply to const correctness verständis on Thu, 03 Jan 2013 20:20:38 GMT]]></title><description><![CDATA[<p>Mit const correctness Bezeichnet man die &quot;Vereinbarung&quot; Referenzen oder Pointer auf Variablen die man nicht verändert als reference to const T bzw. pointer to const T zu nehmen. Heißt:</p>
<pre><code>void print_string(const char* s);
void print_string(const std::string&amp; s);
</code></pre>
<p>Das Dokumentiert dem Aufrufer bereits im Code, dass diese Funktion die übergebende Variable nicht verändern wird, auch wenn sie es prinzipiell könnte. Dem Implementierer der Funktion gibt es zusätzlich die Hilfestellung, dass es einen Compilerfehler gibt wenn er doch versucht das (ohne Cast) zu tun. &quot;Dokumentation&quot; und das was passiert sind so also einigermaßen fest gekoppelt, sodass man Flüchtigkeitsfehler vermeiden kann. const correctness heißt nicht:</p>
<pre><code>void foo(const int i);
</code></pre>
<p>Hier wird eine Kopie angelegt und die ursprüngliche Variable kann eh nicht verändert werden. Das const gibt dem Aufrufer also keine zusätzliche Information. Es könnte zwar als eine Art Hilfe für den Implementierer gesehen werden, aber bei Parametern lässt man das const an der Stelle üblicherweise weg.</p>
<p>Nicht statische Methoden können zusätzlich als &quot;const&quot; deklariert werden.</p>
<pre><code>struct S
{
  void foo() const
  {}
};
</code></pre>
<p>Das macht nichts anderes, als this zu einem const T* zu zaubern. Somit kann das Objekt von dieser Methode nicht verändert werden. (Statische Methoden arbeiten ja nicht auf einem Objekt (haben kein this), deshalb wäre das da sinnlos.)</p>
<p>PS: Steht das eigentlich schon in den FAQ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2285892</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2285892</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Thu, 03 Jan 2013 20:20:38 GMT</pubDate></item><item><title><![CDATA[Reply to const correctness verständis on Thu, 03 Jan 2013 20:17:28 GMT]]></title><description><![CDATA[<p>Methoden können <em>const</em> sein.</p>
<pre><code>class foo
{
public:
 void foo() const; // verändert das Objekt nicht
 void bar(); // verändert das Objekt möglicherweise
 void baz(const std::string&amp; r); // kann r nicht verändern
private:
 int i;
};
</code></pre>
<p>in <em>foo</em> darfst du jetzt nichts machen, was <em>i</em> verändert. Das klingt jetzt einfach, aber wenn du eine komplexe Datenstruktur hast muss diese ebenfalls konstanten Methoden für sich anbieten, damit du die in dieser Methode nutzen kannst.</p>
<p>Auch Parameter sind ein wichtiger Punkt. Vor allem wenn es Referenzen oder Zeiger sind. Der Aufrufer weiss, dass der string, den er an <em>baz</em> übergibt von dieser Methode nicht verändert wird, was ohne das const nicht klar ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2285893</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2285893</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Thu, 03 Jan 2013 20:17:28 GMT</pubDate></item><item><title><![CDATA[Reply to const correctness verständis on Thu, 03 Jan 2013 20:22:08 GMT]]></title><description><![CDATA[<p>drakon schrieb:</p>
<blockquote>
<pre><code class="language-cpp">const; // verändert das Objekt nicht
</code></pre>
</blockquote>
<p>Das war einmal so in C++98.</p>
<p><a href="http://channel9.msdn.com/posts/C-and-Beyond-2012-Herb-Sutter-You-dont-know-blank-and-blank" rel="nofollow">http://channel9.msdn.com/posts/C-and-Beyond-2012-Herb-Sutter-You-dont-know-blank-and-blank</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2285897</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2285897</guid><dc:creator><![CDATA[blankochek]]></dc:creator><pubDate>Thu, 03 Jan 2013 20:22:08 GMT</pubDate></item><item><title><![CDATA[Reply to const correctness verständis on Thu, 03 Jan 2013 20:27:04 GMT]]></title><description><![CDATA[<p>drakon schrieb:</p>
<blockquote>
<p>Methoden können <em>const</em> sein.</p>
<pre><code>class foo
{
public:
 void foo() const; // verändert das Objekt nicht
 void bar(); // verändert das Objekt möglicherweise
 void baz(const std::string&amp; r); // kann r nicht verändern
private:
 int i;
};
</code></pre>
<p>in <em>foo</em> darfst du jetzt nichts machen, was <em>i</em> verändert. Das klingt jetzt einfach, aber wenn du eine komplexe Datenstruktur hast muss diese ebenfalls konstanten Methoden für sich anbieten, damit du die in dieser Methode nutzen kannst.</p>
<p>Auch Parameter sind ein wichtiger Punkt. Vor allem wenn es Referenzen oder Zeiger sind. Der Aufrufer weiss, dass der string, den er an <em>baz</em> übergibt von dieser Methode nicht verändert wird, was ohne das const nicht klar ist.</p>
</blockquote>
<p>Kann foo() nichts mehr ändern oder &quot;sollte&quot; foo() nichts mehr ändern?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2285899</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2285899</guid><dc:creator><![CDATA[const not wtf]]></dc:creator><pubDate>Thu, 03 Jan 2013 20:27:04 GMT</pubDate></item><item><title><![CDATA[Reply to const correctness verständis on Thu, 03 Jan 2013 20:28:50 GMT]]></title><description><![CDATA[<p>Sollte. Mit Casts geht alles was das Typsystem hergibt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2285900</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2285900</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Thu, 03 Jan 2013 20:28:50 GMT</pubDate></item><item><title><![CDATA[Reply to const correctness verständis on Thu, 03 Jan 2013 22:47:09 GMT]]></title><description><![CDATA[<p>Ok, ja. Wenn man da drin keine komischen Sachen macht, dann wird das nicht verändert. Schlimme Dinge kann man natürlich immer anstellen. Mit <code>mutable</code> ist das auch so eine Sache.</p>
<p>Aber ich sag mal, wenn man normalen Code schreibt und es nicht absichtlich machen möchte, dann bleibt const const.</p>
<p>//Edit<br />
@blankochek: Danke für den Link. War sehr interessant.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2285933</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2285933</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Thu, 03 Jan 2013 22:47:09 GMT</pubDate></item><item><title><![CDATA[Reply to const correctness verständis on Fri, 04 Jan 2013 07:11:37 GMT]]></title><description><![CDATA[<p>blankochek schrieb:</p>
<blockquote>
<p>Das war einmal so in C++98.</p>
<p><a href="http://channel9.msdn.com/posts/C-and-Beyond-2012-Herb-Sutter-You-dont-know-blank-and-blank" rel="nofollow">http://channel9.msdn.com/posts/C-and-Beyond-2012-Herb-Sutter-You-dont-know-blank-and-blank</a></p>
</blockquote>
<p>Nettes Video, danke! <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>
]]></description><link>https://www.c-plusplus.net/forum/post/2285995</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2285995</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Fri, 04 Jan 2013 07:11:37 GMT</pubDate></item><item><title><![CDATA[Reply to const correctness verständis on Fri, 04 Jan 2013 07:37:15 GMT]]></title><description><![CDATA[<p>const ist doch eher noch dafür da um programmierfehler vorzubeugen, bis jetzt nur as flüchtigkeitsfehler angeprangert.</p>
<p>jegliche konstanten const machen und bei programmierfehlern springt der compiler an</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2285999</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2285999</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Fri, 04 Jan 2013 07:37:15 GMT</pubDate></item></channel></rss>