<?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[designfrage const correctness, error code]]></title><description><![CDATA[<p>hallo leute</p>
<p>dummer titel, aber faellt mir grad nix ein.</p>
<p>folgendes beispiel (nur pseudo code):</p>
<pre><code>class Punkte
{
   public:
      auto index(int i)
      {
         error_code = 0;
         if(i &gt;= container.size())
         {
            error_code = 1;
            return 0;
         }
         return container[i];
      }

   private:
      int error_code;
      std::vector&lt;int&gt; container;
};
</code></pre>
<p>die function 'index' sollte eigendlich const sein, weil nur lesen drauf zugegriffen wird. durch den error_code geht das aber nicht.</p>
<p>sollte man nun index const machen und error_code mutable oder die function nicht-const lassen ?</p>
<p>Meep Meep</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/339732/designfrage-const-correctness-error-code</link><generator>RSS for Node</generator><lastBuildDate>Sat, 11 Apr 2026 21:44:42 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/339732.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 24 Sep 2016 07:12:53 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to designfrage const correctness, error code on Sat, 24 Sep 2016 07:12:53 GMT]]></title><description><![CDATA[<p>hallo leute</p>
<p>dummer titel, aber faellt mir grad nix ein.</p>
<p>folgendes beispiel (nur pseudo code):</p>
<pre><code>class Punkte
{
   public:
      auto index(int i)
      {
         error_code = 0;
         if(i &gt;= container.size())
         {
            error_code = 1;
            return 0;
         }
         return container[i];
      }

   private:
      int error_code;
      std::vector&lt;int&gt; container;
};
</code></pre>
<p>die function 'index' sollte eigendlich const sein, weil nur lesen drauf zugegriffen wird. durch den error_code geht das aber nicht.</p>
<p>sollte man nun index const machen und error_code mutable oder die function nicht-const lassen ?</p>
<p>Meep Meep</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2509491</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2509491</guid><dc:creator><![CDATA[Meep Meep]]></dc:creator><pubDate>Sat, 24 Sep 2016 07:12:53 GMT</pubDate></item><item><title><![CDATA[Reply to designfrage const correctness, error code on Sat, 24 Sep 2016 07:25:43 GMT]]></title><description><![CDATA[<p>Huhu</p>
<p>Ich würde das mit dem error_code nicht so machen (sehe ich akt. kein Grund zu).</p>
<p>Der error_code ist doch Methodenabhängig, daher würde ich es eher so lösen:</p>
<pre><code>auto index(unsigned int i, bool* ok = nullptr) const {
  if(i &gt;= size()) {
    if(ok) {
      *ok = false;
    }
    return 0;
  }
  // ...
}
</code></pre>
<p>Oder mit den Exceptions arbeiten ... die mit std::vector&lt;&gt;::at() eh geworfen wird.<br />
Dann kannst Du auch die Methode mit const markieren.</p>
<p>Grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2509492</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2509492</guid><dc:creator><![CDATA[__jb__]]></dc:creator><pubDate>Sat, 24 Sep 2016 07:25:43 GMT</pubDate></item><item><title><![CDATA[Reply to designfrage const correctness, error code on Sat, 24 Sep 2016 07:30:58 GMT]]></title><description><![CDATA[<p>das object wird in einer DLL datei erstellt. also geht das mit exceptions nicht.<br />
den error_code hab ich im object drinnen. der ist nicht nur ein int, sondern eine recht aufwendige klasse. deshaölb hab ich auch geschrieben das es pseudocode ist.</p>
<p>mir ist gerade eingefallen das man es mit einem const_cast auch loesen koennte ?<br />
waere das in dem pseudobeispiel angebracht ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2509493</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2509493</guid><dc:creator><![CDATA[Meep Meep]]></dc:creator><pubDate>Sat, 24 Sep 2016 07:30:58 GMT</pubDate></item><item><title><![CDATA[Reply to designfrage const correctness, error code on Sat, 24 Sep 2016 07:41:24 GMT]]></title><description><![CDATA[<p>Wenn der error_code nur intern in deiner Klasse benutzt wird und keine Außenwirkung hat, kannst Du error_code als mutable deklarieren, dann kann man diese auch in einer const-Methode ändern.</p>
<pre><code>mutable int error_code;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2509495</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2509495</guid><dc:creator><![CDATA[Artchi]]></dc:creator><pubDate>Sat, 24 Sep 2016 07:41:24 GMT</pubDate></item><item><title><![CDATA[Reply to designfrage const correctness, error code on Sat, 24 Sep 2016 07:56:16 GMT]]></title><description><![CDATA[<p>Meep Meep schrieb:</p>
<blockquote>
<p>das object wird in einer DLL datei erstellt. also geht das mit exceptions nicht.</p>
</blockquote>
<p>Wie kommst du darauf?</p>
<p>Ansonsten bietet sich ein tuple&lt;bool,int&gt; an.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2509496</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2509496</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Sat, 24 Sep 2016 07:56:16 GMT</pubDate></item><item><title><![CDATA[Reply to designfrage const correctness, error code on Sat, 24 Sep 2016 07:58:45 GMT]]></title><description><![CDATA[<p>wo waere da jetzt der unterschied zwischen mutable und const_cast ?<br />
die error klasse ist nicht-constant. gesetzt wird sie nur ueber die klasse selber. kann aber jeder zeit von aussen her ueberprueft werden.<br />
eigendlich habe ich nur 2 member functions die const sind und den zustand von error aendern wuerden.</p>
<p>Meep Meep</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2509497</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2509497</guid><dc:creator><![CDATA[Meep Meep]]></dc:creator><pubDate>Sat, 24 Sep 2016 07:58:45 GMT</pubDate></item><item><title><![CDATA[Reply to designfrage const correctness, error code on Sat, 24 Sep 2016 08:06:48 GMT]]></title><description><![CDATA[<p>manni66 schrieb:</p>
<blockquote>
<p>Meep Meep schrieb:</p>
<blockquote>
<p>das object wird in einer DLL datei erstellt. also geht das mit exceptions nicht.</p>
</blockquote>
<p>Wie kommst du darauf?</p>
<p>Ansonsten bietet sich ein tuple&lt;bool,int&gt; an.</p>
</blockquote>
<p>Wir kommst du darauf?</p>
<p>exceptions ueber DLL grenzen funktioniert nur unter bestimmten voraussetzungen, die bei mir noch gegeben sind.<br />
und nein, ich will nicht einen errorcode in form eines integers oder aehnlich an den aufrufer uebergeben.<br />
die error-klasse wird auch intensiv intern genutzt. nach aussen hin kann nur lesend darauf zugegriffen werden um z.b. den status der letzten operation zu ueberpruefen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2509499</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2509499</guid><dc:creator><![CDATA[Meep Meep]]></dc:creator><pubDate>Sat, 24 Sep 2016 08:06:48 GMT</pubDate></item><item><title><![CDATA[Reply to designfrage const correctness, error code on Sat, 24 Sep 2016 08:25:16 GMT]]></title><description><![CDATA[<p>Meep Meep schrieb:</p>
<blockquote>
<p>wo waere da jetzt der unterschied zwischen mutable und const_cast ?</p>
</blockquote>
<p><code>mutable</code> macht als Member-Eigenschaft unmissverständlich deutlich, dass der Member eine Sonderstellung einnimmt und beabsichtigt ist, dass die Variable nichts mit der &quot;logischen&quot; const-ness des Objekts zu tun hat (Code-Verständlichkeit).<br />
<code>const_cast</code> wirkt auf mich immer wie ein schmutziger Hack, besonders wenn der cast irgendwo im tief Code versteckt ist.</p>
<p>Falls sich der error-Member wirklich nicht vermeiden lässt, dann mach in am besten <code>mutable</code> <strong>und</strong> synchronisiere ihn zusätzlich noch z.B. mit einem Mutex (auch <code>mutable</code> , Mutex-Member sind die geborenen Mutanten ;)).<br />
Als Nutzer einer Klasse gehöre ich nämlich zu den Leuten die erwarten dass mein Code keine Data Races enthält, wenn nur <code>const</code> -qualifizerte Member-Funktionen aufgerufen werden <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>Finnegan</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2509501</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2509501</guid><dc:creator><![CDATA[Finnegan]]></dc:creator><pubDate>Sat, 24 Sep 2016 08:25:16 GMT</pubDate></item><item><title><![CDATA[Reply to designfrage const correctness, error code on Sat, 24 Sep 2016 08:26:43 GMT]]></title><description><![CDATA[<p>wie meinst du das mit den Data Races ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2509504</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2509504</guid><dc:creator><![CDATA[Meep Meep]]></dc:creator><pubDate>Sat, 24 Sep 2016 08:26:43 GMT</pubDate></item><item><title><![CDATA[Reply to designfrage const correctness, error code on Sat, 24 Sep 2016 08:45:51 GMT]]></title><description><![CDATA[<p>Meep Meep schrieb:</p>
<blockquote>
<p>wie meinst du das mit den Data Races ?</p>
</blockquote>
<p>2 Threads rufen konkurrierend die unverfänglich <code>const</code> -qualifizierte <code>index()</code> -Funktion für das selbe Objekt mit einem zu grossen <code>i</code> auf -&gt; <code>error_code</code> wird ohne Synchronisation ( <code>atomic</code> / <code>mutex</code> ) von zwei Threads geschrieben -&gt; data race -&gt; undefined behavior.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2509508</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2509508</guid><dc:creator><![CDATA[Finnegan]]></dc:creator><pubDate>Sat, 24 Sep 2016 08:45:51 GMT</pubDate></item><item><title><![CDATA[Reply to designfrage const correctness, error code on Sat, 24 Sep 2016 08:59:16 GMT]]></title><description><![CDATA[<p>o, damit hab ich dann kein problem, weil auf die objecte nur serialisiert zugegriffen werden kann. pro thread kann nur max. ein object einer klasse existieren. aber danke trotzdem fuer den hinweis. haette daran nicht gedacht.</p>
<p>Meep Meep</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2509513</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2509513</guid><dc:creator><![CDATA[Meep Meep]]></dc:creator><pubDate>Sat, 24 Sep 2016 08:59:16 GMT</pubDate></item><item><title><![CDATA[Reply to designfrage const correctness, error code on Sat, 24 Sep 2016 17:40:37 GMT]]></title><description><![CDATA[<p>Meep Meep schrieb:</p>
<blockquote>
<p>o, damit hab ich dann kein problem, weil auf die objecte nur serialisiert zugegriffen werden kann. pro thread kann nur max. ein object einer klasse existieren. aber danke trotzdem fuer den hinweis. haette daran nicht gedacht.</p>
</blockquote>
<p>Wenn eine Klasse in einer streng kontrollierten Umgebung verwendet wird kann man das zwar so machen, ich persönlich mache mir allerdings fast immer<br />
die Mühe den Code so zu schreiben, dass er nicht nur unter bestimmten Bedingungen korrekt ist.</p>
<p>Besonders bei längerlebigen Projekten tendiert Code nämlich oft dazu im Laufe der Zeit in einem ganz anderen Kontext zu laufen als ursprünglich beabsichtigt.<br />
Nach meinem Bauchgefühl ist das so etwas wie ein blankes <code>new</code> / <code>delete</code> -Paar - das kann man zwar durchaus korrekt einsetzen, wenn einem z.B. dazwischen keine<br />
Exceptions um die Ohren fliegen, aber jede zusätzliche Regel die man später beachten muss, wenn man den Code wieder anfasst macht ein größeres Projekt<br />
instabiler gegenüber Änderungen und somit schwerer zu bändigen. Wenn man sowas auf die Spitze treibt hat man nachher eines von diesen berüchtigten<br />
Programmen bei dem fast jeder Bugfix oder ein neues Feature einen neuen &quot;WTF!?&quot;-Bug an einer gan anderen Stelle aufreisst <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>Finnegan</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2509599</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2509599</guid><dc:creator><![CDATA[Finnegan]]></dc:creator><pubDate>Sat, 24 Sep 2016 17:40:37 GMT</pubDate></item></channel></rss>