<?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[std::exception und die Kinder]]></title><description><![CDATA[<p>Hi,</p>
<p>ich wollte jetzt Mal brav meine Klasse von std::exception erben lassen. Bei vielen Stackoverflow-Beiträgen stand aber, man sollte doch lieber von den Unterklassen erben.</p>
<p>Jetzt verstehe ich diese aber nicht. std::runtime_error und std::logical_error wären für mich jetzt per se erstmal exklusiv, das geht klar. Aber von std::logical_error erbt ja wiederum std::domain_error und als Beispiel dafür steht bei <a href="http://cplusplus.com/reference" rel="nofollow">cplusplus.com/reference</a> ( <a href="http://www.cplusplus.com/reference/stdexcept/domain_error/" rel="nofollow">http://www.cplusplus.com/reference/stdexcept/domain_error/</a> ) die Angabe einer negativen Zahl für eine Wurzelfunktion. Wenn der Aufruf aber mit Benutzereingaben geschieht, so hat das doch nichts mit der Programmlogik zu tun. Wo liegt mein Denkfehler?</p>
<p>Beste Grüße!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/318929/std-exception-und-die-kinder</link><generator>RSS for Node</generator><lastBuildDate>Sun, 26 Jul 2026 09:31:23 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/318929.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 31 Jul 2013 15:31:55 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to std::exception und die Kinder on Wed, 31 Jul 2013 15:31:55 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>ich wollte jetzt Mal brav meine Klasse von std::exception erben lassen. Bei vielen Stackoverflow-Beiträgen stand aber, man sollte doch lieber von den Unterklassen erben.</p>
<p>Jetzt verstehe ich diese aber nicht. std::runtime_error und std::logical_error wären für mich jetzt per se erstmal exklusiv, das geht klar. Aber von std::logical_error erbt ja wiederum std::domain_error und als Beispiel dafür steht bei <a href="http://cplusplus.com/reference" rel="nofollow">cplusplus.com/reference</a> ( <a href="http://www.cplusplus.com/reference/stdexcept/domain_error/" rel="nofollow">http://www.cplusplus.com/reference/stdexcept/domain_error/</a> ) die Angabe einer negativen Zahl für eine Wurzelfunktion. Wenn der Aufruf aber mit Benutzereingaben geschieht, so hat das doch nichts mit der Programmlogik zu tun. Wo liegt mein Denkfehler?</p>
<p>Beste Grüße!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2342571</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2342571</guid><dc:creator><![CDATA[Eisflamme]]></dc:creator><pubDate>Wed, 31 Jul 2013 15:31:55 GMT</pubDate></item><item><title><![CDATA[Reply to std::exception und die Kinder on Wed, 31 Jul 2013 15:39:24 GMT]]></title><description><![CDATA[<p>Eisflamme schrieb:</p>
<blockquote>
<p>Wenn der Aufruf aber mit Benutzereingaben geschieht, so hat das doch nichts mit der Programmlogik zu tun. Wo liegt mein Denkfehler?</p>
</blockquote>
<p>logic_error sagt dir, dass die Programmlogik die Benutzereingabe vorher auf &lt;0 hätte checken sollen. Programme, die sqrt(negativeZahl) aufrufen, fehlt dieser notwendige Check.</p>
<p>Ich bin allgemein der Meinung, dass diese Aufteilung und das ganze std::exception-Design schlecht ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2342572</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2342572</guid><dc:creator><![CDATA[dfdf]]></dc:creator><pubDate>Wed, 31 Jul 2013 15:39:24 GMT</pubDate></item><item><title><![CDATA[Reply to std::exception und die Kinder on Wed, 31 Jul 2013 16:01:23 GMT]]></title><description><![CDATA[<blockquote>
<p>Wenn der Aufruf aber mit Benutzereingaben geschieht, so hat das doch nichts mit der Programmlogik zu tun.</p>
</blockquote>
<p>Der Funktion ist es egal woher, die Daten kommen. Sie wirft einfach bei falscher Benutzung, basta. Woher soll den sqrt wissen, woher seine Parameter kommen?</p>
<p>Wenn du von Amazon ein Paket bekommst und es ist das Falsche drin, dann schickst du es auch zurueck, egal ob es ein Roboter verpackt hat oder ein Mensch.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2342579</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2342579</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Wed, 31 Jul 2013 16:01:23 GMT</pubDate></item><item><title><![CDATA[Reply to std::exception und die Kinder on Wed, 31 Jul 2013 16:08:38 GMT]]></title><description><![CDATA[<p>Eigene Exception-Klassen leite ich grundsätzlich von <code>std::runtime_error</code> ab.<br />
Bei &quot;logic errors&quot; mach' ich keine eigenen Klassen, sondern werfe eine der vom Standard definierten.<br />
Wenn keine andere passt auch einen <code>std::logic_error</code> direkt.</p>
<p>Eisflamme schrieb:</p>
<blockquote>
<p>... die Angabe einer negativen Zahl für eine Wurzelfunktion. Wenn der Aufruf aber mit Benutzereingaben geschieht, so hat das doch nichts mit der Programmlogik zu tun. Wo liegt mein Denkfehler?</p>
</blockquote>
<p>Dein Programm ruft die Wurzelfunktion mit einer negativen Zahl auf, und das ist nicht erlaubt. Daher ist das ein Programmfehler.<br />
Wenn die Zahl aus einer Benutzereingabe kommt, dann ist der Fehler dass dein Programm die Benutzereingabe nicht validiert bevor er damit die Wurzelfunktion aufruft.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2342580</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2342580</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Wed, 31 Jul 2013 16:08:38 GMT</pubDate></item><item><title><![CDATA[Reply to std::exception und die Kinder on Wed, 31 Jul 2013 16:08:43 GMT]]></title><description><![CDATA[<p>dfdf schrieb:</p>
<blockquote>
<p>Ich bin allgemein der Meinung, dass diese Aufteilung und das ganze std::exception-Design schlecht ist.</p>
</blockquote>
<p>Warum? Was insbesondere ist an der Aufteilung in Logik- und Laufzeitfehler schlecht?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2342581</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2342581</guid><dc:creator><![CDATA[Bashar]]></dc:creator><pubDate>Wed, 31 Jul 2013 16:08:43 GMT</pubDate></item><item><title><![CDATA[Reply to std::exception und die Kinder on Thu, 01 Aug 2013 06:47:41 GMT]]></title><description><![CDATA[<p>Ich verstehe das Argument zwar - aber ist der Exceptionwurf nicht genau die Behandlung der Falscheingabe? Was spricht denn dagegen die Exception dann einfach zu fangen und einen Fehler auszugeben, dass die Eingabe falsch war. Wieso nochmal etwas drumherum packen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2342673</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2342673</guid><dc:creator><![CDATA[Eisflamme]]></dc:creator><pubDate>Thu, 01 Aug 2013 06:47:41 GMT</pubDate></item><item><title><![CDATA[Reply to std::exception und die Kinder on Thu, 01 Aug 2013 08:56:13 GMT]]></title><description><![CDATA[<blockquote>
<p>aber ist der Exceptionwurf nicht genau die Behandlung der Falscheingabe?</p>
</blockquote>
<p>Exceptions haben was mit Ausnahmen zu tun voellig losgeloest von Eingaben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2342700</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2342700</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Thu, 01 Aug 2013 08:56:13 GMT</pubDate></item><item><title><![CDATA[Reply to std::exception und die Kinder on Thu, 01 Aug 2013 09:03:32 GMT]]></title><description><![CDATA[<p>Bashar schrieb:</p>
<blockquote>
<p>Warum? Was insbesondere ist an der Aufteilung in Logik- und Laufzeitfehler schlecht?</p>
</blockquote>
<p>In welchen Situationen kann man std::logic_error denn sinnvoll einsetzen? Das einzig Vernünftige, was man damit tun kann, ist das Programm sofort zu beenden und einen Log o.Ä. zu schreiben. Nach einem Logikfehler sollte man aber nicht weiterarbeiten.</p>
<p>Ist für mich halt eher ein Fall von assert...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2342701</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2342701</guid><dc:creator><![CDATA[logik0r]]></dc:creator><pubDate>Thu, 01 Aug 2013 09:03:32 GMT</pubDate></item><item><title><![CDATA[Reply to std::exception und die Kinder on Thu, 01 Aug 2013 09:16:03 GMT]]></title><description><![CDATA[<p>Logikfehler werden koennen weiter spezifiziert werden durch domain_error, invalid_argument, length_error, out_of_range, future_error. logic_error ist also genau dann sinnvoll, wenn es so aehnlich wie dessen Ableitungen ist, diese es nicht ganz treffen.</p>
<blockquote>
<p>Nach einem Logikfehler sollte man aber nicht weiterarbeiten.</p>
</blockquote>
<p>Koennen muessen sollen ... ist vom Anwendungs- und Problemfall abhaengig.</p>
<blockquote>
<p>Das einzig Vernünftige ... das Programm sofort zu beenden</p>
</blockquote>
<p>Bullshit.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2342705</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2342705</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Thu, 01 Aug 2013 09:16:03 GMT</pubDate></item><item><title><![CDATA[Reply to std::exception und die Kinder on Thu, 01 Aug 2013 09:38:55 GMT]]></title><description><![CDATA[<p>logik0r schrieb:</p>
<blockquote>
<p>Ist für mich halt eher ein Fall von assert...</p>
</blockquote>
<p>assertions haben im Release-Modus keine Wirkung.</p>
<p>BTW, sollte das eine Antwort auf meine Frage sein? Wenn du der Meinung bist, dass Logikfehler als Exceptions sinnlos sind, dann ist doch nicht die Aufteilung der Exceptionhierarchie schlecht, sondern gerade gut. Du kannst den Zweig logic_error dann ja einfach ignorieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2342716</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2342716</guid><dc:creator><![CDATA[Bashar]]></dc:creator><pubDate>Thu, 01 Aug 2013 09:38:55 GMT</pubDate></item><item><title><![CDATA[Reply to std::exception und die Kinder on Thu, 01 Aug 2013 11:14:38 GMT]]></title><description><![CDATA[<p>Was sind für euch Logikfehler? Für mich sind Logikfehler Bugs.</p>
<p>Etwas, das im Release-Modus nicht vorkommt. Und vor allem etwas, das man nicht sinnvoll zur Laufzeit behandeln kann -- wenn die Programmlogik fehlerhaft ist, wie soll man dann noch weiterarbeiten? Jeder weitere Schritt basiert auf fehlerhaften Annahmen. Man läuft Gefahr, noch mehr Schaden anzurichten, wenn man den Fehler ignoriert. Daher würde ich versuchen, was möglich ist zu retten, und das Programm zu beenden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2342731</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2342731</guid><dc:creator><![CDATA[logik0r]]></dc:creator><pubDate>Thu, 01 Aug 2013 11:14:38 GMT</pubDate></item><item><title><![CDATA[Reply to std::exception und die Kinder on Thu, 01 Aug 2013 11:32:12 GMT]]></title><description><![CDATA[<p>logik0r schrieb:</p>
<blockquote>
<p>Daher würde ich versuchen, was möglich ist zu retten, und das Programm zu beenden.</p>
</blockquote>
<p>Und wie machst du das? Sicherlich nicht, indem du den Fehler ignorierst oder mittels assert ein exit auslöst, sondern indem du eine Exception wirfst, die gefangen wird und einen geregelten Abbruch auslöst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2342734</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2342734</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Thu, 01 Aug 2013 11:32:12 GMT</pubDate></item><item><title><![CDATA[Reply to std::exception und die Kinder on Thu, 01 Aug 2013 11:35:55 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/19375">@SeppJ</a><br />
Nein, eben gerade nicht.<br />
Man will eigentlich einen nicht-ganz-so-geregelten Abbruch.<br />
Ideal wäre die Exception gar nicht zu fangen.</p>
<p>WENN man denn überhaupt abbrechen will.</p>
<p>@logik0r<br />
Die Argumentation ist so alt wie das Thema Fehlerbehandlung in Programmen.<br />
Der Standpunkt ist nicht unsinnig. Er ist aber auch nicht der einzige der Sinn macht. In vielen Fällen ist es besser das Programm fortzusetzen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2342735</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2342735</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Thu, 01 Aug 2013 11:35:55 GMT</pubDate></item><item><title><![CDATA[Reply to std::exception und die Kinder on Thu, 01 Aug 2013 12:04:17 GMT]]></title><description><![CDATA[<p>Also ich finde &quot;falsches Argument ist ein Logikfehler&quot; nicht konsistent durchdenkbar.</p>
<p>Demnach sollte eine invalid_argument-Exception nicht ausgelöst werden, wenn der Benutzer irgendwas eingibt?<br />
~~<br />
Wenn mein XML-Parser also eine invalid_argument-Exception wirft, weil der Benutzer in der Datei rumhantiert hat (was er darf!), aber einen Fehler gemacht hat, dann ist das nicht legitim? Analog zur Wurzelfunktion müsste ich ja hier vorher alles prüfen, damit die Exception nicht geworfen wird, weil die ja sagen würde &quot;falsches Argument&quot; und damit ein Logikfehler wäre. Oder habe ich einen Denkfehler?~~</p>
<p>std::streams kann man so einstellen, dass die bei Falscheingabe eine Exception werfen.</p>
<pre><code class="language-cpp">int x;
std::cin &gt;&gt; x;
</code></pre>
<p>Benutzer gibt &quot;Hund&quot; ein, Exception fliegt =&gt; Das ist aber ein runtime_error. Vom Namen her wäre invalid_argument doch die perfekte Basisklasse. Oder ist &quot;Hund&quot; in dem Kontext kein Argument? Dann finde ich aber invalid_argument als Namen irreführend.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2342744</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2342744</guid><dc:creator><![CDATA[Eisflamme]]></dc:creator><pubDate>Thu, 01 Aug 2013 12:04:17 GMT</pubDate></item><item><title><![CDATA[Reply to std::exception und die Kinder on Thu, 01 Aug 2013 12:09:09 GMT]]></title><description><![CDATA[<p>Eisflamme schrieb:</p>
<blockquote>
<p>Oder ist &quot;Hund&quot; in dem Kontext kein Argument?</p>
</blockquote>
<p>Argumente sind das, was an Funktionen übergeben wird, nicht die Zeichen in irgendeinem Stream. Hier also das x.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2342745</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2342745</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Thu, 01 Aug 2013 12:09:09 GMT</pubDate></item><item><title><![CDATA[Reply to std::exception und die Kinder on Thu, 01 Aug 2013 12:15:25 GMT]]></title><description><![CDATA[<p>Dann nehme ich doch wieder mein Beispiel mit der XML-Datei. Die lese ich einen string, den übergebe ich meinem Parser. Parser merkt &quot;das ist grober Unfug&quot; und schmeiß ne Exception. Wäre die Exception vom Typ invalid_argument, wäre das für mich vom Namen her korrekt, weil das Argument mit dem Inhalt &quot;XML-Datei&quot; invalide war.</p>
<p>Wäre aber trotzdem basierend auf Benutzereingabe, hat nichts mit einem Logikfehler der Software zu tun.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2342746</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2342746</guid><dc:creator><![CDATA[Eisflamme]]></dc:creator><pubDate>Thu, 01 Aug 2013 12:15:25 GMT</pubDate></item><item><title><![CDATA[Reply to std::exception und die Kinder on Thu, 01 Aug 2013 12:31:49 GMT]]></title><description><![CDATA[<p>Ist doch egal, woher der Inhalt der Zeichenkette kommt. Letztendlich war das Argument &quot;grober Unfug&quot;, das Durchführen der Aktion logisch unmöglich. Der runtime_error zeigt hingegen an &quot;Upps, das sah eigentlich richtig aus, hat aber trotzdem nicht funktioniert&quot;.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2342747</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2342747</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Thu, 01 Aug 2013 12:31:49 GMT</pubDate></item><item><title><![CDATA[Reply to std::exception und die Kinder on Thu, 01 Aug 2013 12:59:51 GMT]]></title><description><![CDATA[<blockquote>
<p>Man läuft Gefahr, noch mehr Schaden anzurichten, wenn man den Fehler ignoriert. Daher würde ich versuchen, was möglich ist zu retten, und das Programm zu beenden.</p>
</blockquote>
<p>Niemand redet von Ignorieren, Abbruch ist die letzte Option, aber nie die einzige. Ein konsistenter Zustand der Anwendung ist bei vielen Programmen gefragt, erst wenn dieser nicht mehr hergestellt werden kann, dann ist ein koordinietes Beenden sinnvoll.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2342754</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2342754</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Thu, 01 Aug 2013 12:59:51 GMT</pubDate></item><item><title><![CDATA[Reply to std::exception und die Kinder on Thu, 01 Aug 2013 13:05:13 GMT]]></title><description><![CDATA[<p>Achso. Ich dachte, logical_error hieße, dass die Software einen Logikfehler enthält, nicht etwa dass eine Aktion logisch nicht möglich durchführbar ist. Natürlich sind asserts für ersteres da.</p>
<p>Nagut, dann... puh, ich weiß nicht, ob ich die Unterscheidung so toll finde. Schließlich ist logical_error ja auch ein Fehler, der zur Laufzeit geschieht, somit eine Art &quot;runtime_error&quot;, auch wenn das Wort es nicht bedeutet.</p>
<p>Mir fällt nicht Besseres ein, aber mir erscheint das einfach überhaupt nicht intuitiv... mein Problem <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/2342757</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2342757</guid><dc:creator><![CDATA[Eisflamme]]></dc:creator><pubDate>Thu, 01 Aug 2013 13:05:13 GMT</pubDate></item><item><title><![CDATA[Reply to std::exception und die Kinder on Thu, 01 Aug 2013 13:14:52 GMT]]></title><description><![CDATA[<p>Das ist ja auch so eine Art logischer Fehler in der Software, wenn so etwas auftreten kann. Sie hat so geschrieben zu sein, dass unmögliche Aktionen gar nicht erst durchgeführt werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2342759</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2342759</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Thu, 01 Aug 2013 13:14:52 GMT</pubDate></item><item><title><![CDATA[Reply to std::exception und die Kinder on Thu, 01 Aug 2013 15:16:46 GMT]]></title><description><![CDATA[<p>Find ich nicht. Wenn der Benutzer mir eine malformed XML-Datei eingibt, fliegt dadurch eine Exception, die fange ich und weiß dadurch, dass sie korrupt ist. Dann kriegt der Benutzer eine entsprechende Meldung und das Programm läuft weiter, als hätte man die Datei noch nicht geladen.</p>
<p>Wieso soll ich da einen großartigen XML-Check vorsetzen? Regel ist, dass die XML-Datei in Ordnung ist. Ausnahme, dass etwas daran kaputt ist, weil der Benutzer Fehler gemacht hat.</p>
<p>Es ist einfach unnötiger Aufwand irgendwelche Checks drumherum einzubauen, wenn der Parser das selbst macht und mir das mit einer Exception mitteilt. Mehr Code, der fehlerhaft sein kann und der einfach unnötig ist. Genau so sehe ich nicht, wieso ich bei einer Wurzelfunktion nicht einfach die Exception fangen kann, dem Benutzer die Ausgabe gebe, dass das Argument invalide ist und der Ablauf weitergeht... Wo ist das Problem?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2342781</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2342781</guid><dc:creator><![CDATA[Eisflamme]]></dc:creator><pubDate>Thu, 01 Aug 2013 15:16:46 GMT</pubDate></item><item><title><![CDATA[Reply to std::exception und die Kinder on Thu, 01 Aug 2013 15:51:26 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/22559">@Eisflamme</a><br />
Einen &quot;logic error&quot; mit einer Exception statt ASSERT/abort/... zu behandeln kann oft in Interfaces zwischen zwei Programmteilen Sinn machen.</p>
<p>Denk nur mal an Betriebssysteme.</p>
<p>Ich denke die wenigsten Leute hätten viel Freude damit wenn das OS sämtliche &quot;logic errors&quot; mit einem BSOD bzw. auch nur dem Abbruch des Prozesses quittieren würde.<br />
Beispielsweise wenn man einen IOCTL an ein Gerät schickt das diesen gar nicht unterstützt.<br />
Oder wenn man versucht in ein File zu schreiben das man nicht schreiben darf.</p>
<p>Das sind Dinge die ein Programm immer vermeiden könnte, aber oft ist es besser es einfach zu probieren und dann zu sehen was passiert. Weil es oft viel unkomplizierter umzusetzen ist, und unkomplizierter ist besser als komplizierter.</p>
<p>Natürlich kann man jetzt sagen dass alles was &quot;von ausserhalb&quot; kommt erstmal validiert werden müsste. Aber es ist oft einfach nicht praktikabel alles vorab erstmal zu validieren. Es ist oft viel praktischer in der Schicht die die Requests von Ausserhalb entgegennimmt nur bestimmte grundlegende Dinge zu validieren, und den Request dann an einen anderen Programmteil weiterzureichen.<br />
Wenn der dann aber sämtliche &quot;invalid argument&quot; Fehler mit ASSERT/abort quittiert, hat man ein Problem.</p>
<p>mMn. muss man in jedem Fall einzeln entscheiden ob es OK ist bei einem bestimmten Fehler eine Exception zu werfen, oder ob es doch besser wäre den Prozess einfach abzubrechen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2342792</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2342792</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Thu, 01 Aug 2013 15:51:26 GMT</pubDate></item><item><title><![CDATA[Reply to std::exception und die Kinder on Thu, 01 Aug 2013 16:44:24 GMT]]></title><description><![CDATA[<blockquote>
<p>Wieso soll ich da einen großartigen XML-Check vorsetzen? Regel ist, dass die XML-Datei in Ordnung ist. Ausnahme, dass etwas daran kaputt ist, weil der Benutzer Fehler gemacht hat ... wenn der Parser das selbst macht und mir das mit einer Exception mitteilt</p>
</blockquote>
<p>Nein, Exceptions werden normalerweise nicht fuer diese Art Ausnahmen benutzt. Normalerweise gibt der Parser den Fehler beim Parsen nicht durch eine Exception nach aussen weiter. Bedenke: C++ ist nicht Java, wo dass vielleicht ueblich ist. Exceptions werden fuer unvorhersehbare Dinge benutzt und nicht fuer den Kontrollfluss. Beispiel Netzwerkverbinding: Eine Ausnahmesituation ist, wenn eine bestehende Netzwerkverbindung waehrend einer Transaktion gekappt wird indem der Netzstecker gezogen wird. Selbst dann muss nicht auf Exceptions zurueckgegriffen werden.</p>
<p>Beispiel fuer logic_error: Dynamische Datentyp, der sowohl Strings und Zahlen repraesentieren kann. Operationen auf diesen bspw. + sind nur partiell definiert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2342808</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2342808</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Thu, 01 Aug 2013 16:44:24 GMT</pubDate></item><item><title><![CDATA[Reply to std::exception und die Kinder on Fri, 02 Aug 2013 08:20:41 GMT]]></title><description><![CDATA[<p>hustbaer:<br />
Okay, verstehe ich!</p>
<p>knivil:<br />
Das verstehe ich auch, wobei ich es immer noch schwierig finde die Grenze zu ziehen. Unvorhergesehen ist ja im Grunde nichts, wenn man dafür eine Exception bastelt, denn dann hat man ja dran gedacht. Dein Beispiel für logic_error finde ich gut. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /> Hm, aber für mich ist ein Ausnahmefall auch nur ein anderer Zweig eines Kontrollflusses. Wie gesagt: Meine XML-Datei wird ja eigentlich immer korrekt geparst. Dass die invalide ist, ist für mich unvorhergesehen (zu einem gewissen Maße, siehe Satz 2).</p>
<p>Auch glaube ich dann bei vielen Bibliotheken Konflikte zu sehen. Also RapidXML schmeiß eben in dem Szenario eine Exception, ist das dann &quot;falsch&quot;? Und bei std::cin kann man bei Bedarf auf fehlerhafte Benutzereingabe eine Exception werfen lassen, das ist für mich aber auf derselben Ebene wie eine XML-Datei-Eingabe: wenn der Benutzer bei einer Zahlenerwartung einen String eingibt, ist das für mich genau so Kontrollfluss (oder Ausnahme, je nach Standpunkt) wie bei einer malformed XML-Datei. Dann wäre hier eine Exception ja auch nicht angebracht?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2342881</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2342881</guid><dc:creator><![CDATA[Eisflamme]]></dc:creator><pubDate>Fri, 02 Aug 2013 08:20:41 GMT</pubDate></item><item><title><![CDATA[Reply to std::exception und die Kinder on Fri, 02 Aug 2013 08:33:41 GMT]]></title><description><![CDATA[<blockquote>
<p>ist das dann &quot;falsch&quot;?</p>
</blockquote>
<p>Sicher nicht. Finde ich es gut: Nein. <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="🙂"
    /> Klar kann man sagen, ist Geschmackssache. Aber manche haben halt einen schlechten Geschmack. <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="🙂"
    /> Wer definiert guten Geschmack? Hmm, die C++-Community wahrscheinlich.</p>
<p>Unterschied zwischen Benutzereingabe und XML-Datei: Benutzer verschreibt sich viel oefter als dass eine maschinengenerierte XML-Datei fehlerhaft ist. Deswegen ist es legitim, auf Fehler unterschiedlich zu reagieren.</p>
<blockquote>
<p>Auch glaube ich dann bei vielen Bibliotheken Konflikte zu sehen</p>
</blockquote>
<p>Nun, viele Bibliotheken schmecken eben nicht gut. Aber nicht immer kann man sich ein Gericht von einem 3-Sterne-Koch leisten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2342885</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2342885</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Fri, 02 Aug 2013 08:33:41 GMT</pubDate></item><item><title><![CDATA[Reply to std::exception und die Kinder on Fri, 02 Aug 2013 08:32:52 GMT]]></title><description><![CDATA[<p>Ja, nur manchmal kann der Benutzer auch manuell die XML-Datei ändern. Wollen die meisten bei mir nicht, aber kommt vor. Aber gut, ich sehe schon, die Grenze ist verschwommen.</p>
<p>Macht das boost für Deinen Geschmack gut? Irgendworan muss man sich ja ein Beispiel nehmen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2342888</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2342888</guid><dc:creator><![CDATA[Eisflamme]]></dc:creator><pubDate>Fri, 02 Aug 2013 08:32:52 GMT</pubDate></item></channel></rss>