<?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[C++ Exceptions in der Praxis]]></title><description><![CDATA[<p>Für welche Fälle verwendet ihr Exceptions in der Praxis?</p>
<p>PS: Ich bin nicht an theoretischen Belehrungen über Exceptions interessiert.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/284464/c-exceptions-in-der-praxis</link><generator>RSS for Node</generator><lastBuildDate>Sat, 22 Aug 2026 02:27:37 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/284464.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 02 Apr 2011 03:37:56 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to C++ Exceptions in der Praxis on Sat, 02 Apr 2011 03:37:56 GMT]]></title><description><![CDATA[<p>Für welche Fälle verwendet ihr Exceptions in der Praxis?</p>
<p>PS: Ich bin nicht an theoretischen Belehrungen über Exceptions interessiert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2043554</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2043554</guid><dc:creator><![CDATA[Praktiker]]></dc:creator><pubDate>Sat, 02 Apr 2011 03:37:56 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Exceptions in der Praxis on Sat, 02 Apr 2011 05:05:33 GMT]]></title><description><![CDATA[<p>Für nicht planmäßig im Programm auftretende Ausnahmen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /><br />
Wenn ich eigentlich erwarte, dass es funktioniert, aber nicht zwangsläufig<br />
funktionieren muss.</p>
<p>Jetzt frag nicht, was eigentlich funktionieren muss...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2043556</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2043556</guid><dc:creator><![CDATA[Exception000]]></dc:creator><pubDate>Sat, 02 Apr 2011 05:05:33 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Exceptions in der Praxis on Sat, 02 Apr 2011 06:53:49 GMT]]></title><description><![CDATA[<p>Exception000 schrieb:</p>
<blockquote>
<p>Für nicht planmäßig im Programm auftretende Ausnahmen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /><br />
Wenn ich eigentlich erwarte, dass es funktioniert, aber nicht zwangsläufig<br />
funktionieren muss.</p>
<p>Jetzt frag nicht, was eigentlich funktionieren muss...</p>
</blockquote>
<p>Genau sowas theoretisches will ich nicht. Ich will praktische Beispiele. Wo hast du zum letzen mal eine Exception verwendet?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2043565</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2043565</guid><dc:creator><![CDATA[Praktiker]]></dc:creator><pubDate>Sat, 02 Apr 2011 06:53:49 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Exceptions in der Praxis on Sat, 02 Apr 2011 07:58:28 GMT]]></title><description><![CDATA[<blockquote>
<p>Genau sowas theoretisches will ich nicht. Ich will praktische Beispiele. Wo hast du zum letzen mal eine Exception verwendet?</p>
</blockquote>
<p>Du verwechselst Theoretisch &lt;=&gt; Praktisch mit Abstrakt &lt;=&gt; Konkret. Was Exception00 schrieb war eine abstrakte Beschreibung der Situationen in denen Exceptions Anwendungen finden. Soll man dir jetzt alle Situationen aufzählen, in der Exception000 Bedingung zutrifft? Google verdammt nochmal!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2043575</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2043575</guid><dc:creator><![CDATA[Oh Mann]]></dc:creator><pubDate>Sat, 02 Apr 2011 07:58:28 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Exceptions in der Praxis on Sat, 02 Apr 2011 08:12:46 GMT]]></title><description><![CDATA[<p>Neulich hatte ich folgende Situation (ein Bsp.):</p>
<pre><code class="language-cpp">class Options
{
public:
   void add(const std::string&amp; name, const std::string&amp; value); // throw(InvalidArgument)
};

class WebServer
{
public:
   WebServer();

   bool isStarted() const;
   void start(const Options&amp; options); // throw(InvalidOperation)
   void stop();                        // throw(InvalidOperation)
};
</code></pre>
<p>Dabei wäre es natürlich schön WebServer::start(..) im Konstruktor und WebServer::stop() im Destruktor aufzurufen (start / stop dortin verschieben) - jedoch ist das aus technischen Gründen nicht möglich.</p>
<p>WebServer::start(..) darf nur aufgerufen werden, wenn WebServer::isStarted() false zurückgibt. Umgekehrt darf WebServer::stop(..) nur aufgerufen werden wenn WebServer::isStarted() true zurückgibt. In Fällen wo diese Bedingungen verletzt sind werfe ich eine Exception.</p>
<p>Bei Options::add(..) wird eine InvalidArgument Exception geworfen, wenn die Option nicht existiert (der WebServer weiss nichts damit anzufangen).</p>
<p>Simon</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2043576</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2043576</guid><dc:creator><![CDATA[theta]]></dc:creator><pubDate>Sat, 02 Apr 2011 08:12:46 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Exceptions in der Praxis on Sat, 02 Apr 2011 09:07:35 GMT]]></title><description><![CDATA[<p>Praktiker schrieb:</p>
<blockquote>
<p>Exception000 schrieb:</p>
<blockquote>
<p>Für nicht planmäßig im Programm auftretende Ausnahmen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /><br />
Wenn ich eigentlich erwarte, dass es funktioniert, aber nicht zwangsläufig<br />
funktionieren muss.</p>
<p>Jetzt frag nicht, was eigentlich funktionieren muss...</p>
</blockquote>
<p>Genau sowas theoretisches will ich nicht. Ich will praktische Beispiele. Wo hast du zum letzen mal eine Exception verwendet?</p>
</blockquote>
<p>Auf Anhieb fallen mir Folgende ein:</p>
<ul>
<li>
<p>Fehler bei Hardwarezugriffen-Zugriffen</p>
</li>
<li>
<p>Datei-Zugriffen</p>
</li>
<li>
<p>Socket</p>
</li>
<li>
<p>...</p>
</li>
<li>
<p>Unerfüllte Preconditions (siehe theta) [EDIT: wobei ich diese manchmal nur für im Debug schmeisse]</p>
</li>
<li>
<p>auch: bestimmte Resource nicht verfügbar</p>
</li>
<li>
<p>Falls übergebene Parameter nicht den Anforderungen entsprechen</p>
</li>
<li>
<p>Invalider/Nichtparsebarer Content (z. B. invalides Xml)</p>
</li>
<li>
<p>Unbekannte Bezeichner (Attribut &quot;xyz&quot; kann nicht verarbeitet werden)</p>
</li>
<li>
<p>Ungültige Kombination von Parametern (wenn x dann kann nicht auch y)</p>
</li>
<li>
<p>Unterbrechen von Threads</p>
</li>
</ul>
<p>Gruß,<br />
XSpille</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2043582</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2043582</guid><dc:creator><![CDATA[XSpille]]></dc:creator><pubDate>Sat, 02 Apr 2011 09:07:35 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Exceptions in der Praxis on Sat, 02 Apr 2011 09:10:47 GMT]]></title><description><![CDATA[<p>Werft ihr bei ungültigen Argumenten Exceptions? Ich würde da ein assert einbauen, im Release sollte sowas ja nicht mehr vorkommen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2043587</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2043587</guid><dc:creator><![CDATA[assert]]></dc:creator><pubDate>Sat, 02 Apr 2011 09:10:47 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Exceptions in der Praxis on Sat, 02 Apr 2011 09:13:46 GMT]]></title><description><![CDATA[<p>assert schrieb:</p>
<blockquote>
<p>Werft ihr bei ungültigen Argumenten Exceptions? Ich würde da ein assert einbauen, im Release sollte sowas ja nicht mehr vorkommen.</p>
</blockquote>
<p>Kommt draus an, wo sie herkommen...<br />
Wenn sie aus z. B. Konfigurationsdateien kommen, dann kann es auch im<br />
Release passieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2043589</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2043589</guid><dc:creator><![CDATA[XSpille]]></dc:creator><pubDate>Sat, 02 Apr 2011 09:13:46 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Exceptions in der Praxis on Sat, 02 Apr 2011 09:15:18 GMT]]></title><description><![CDATA[<p>assert schrieb:</p>
<blockquote>
<p>Werft ihr bei ungültigen Argumenten Exceptions? Ich würde da ein assert einbauen, im Release sollte sowas ja nicht mehr vorkommen.</p>
</blockquote>
<p>Ich würde sagen, das kommt daraufan von wo die Argumente kommen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2043591</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2043591</guid><dc:creator><![CDATA[theta]]></dc:creator><pubDate>Sat, 02 Apr 2011 09:15:18 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Exceptions in der Praxis on Sat, 02 Apr 2011 10:12:20 GMT]]></title><description><![CDATA[<p>assert schrieb:</p>
<blockquote>
<p>Werft ihr bei ungültigen Argumenten Exceptions? Ich würde da ein assert einbauen, im Release sollte sowas ja nicht mehr vorkommen.</p>
</blockquote>
<p>Assert ist für Programmierfehler in deinem eigenen Code. Aber nicht für aufrufenden Code.</p>
<p>Es gibt drei Fehlerkategorien:</p>
<p>1. Logikfehler, die der Aufrufer zu verantworten hat (z.B. falsche Parameter übergeben). =&gt; <a href="http://www.cppreference.com/wiki/error/exception/logic_error/start" rel="nofollow">std::logic_error</a><br />
2. Laufzeitfehler, die der Aufrufer und der eigene Code <em>nicht</em> zu verantworten haben (z.B. Server ist auf einmal nicht erreichbar). =&gt; <a href="http://www.cppreference.com/wiki/error/exception/runtime_error/start" rel="nofollow">std::runtime_error</a><br />
3. Programmierfehler, wofür nur ich selber für verantwortlich bin und meinen eigenen Code damit prüfe. =&gt; <a href="http://www.cppreference.com/wiki/error/assert" rel="nofollow">Assert</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2043614</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2043614</guid><dc:creator><![CDATA[Artchi]]></dc:creator><pubDate>Sat, 02 Apr 2011 10:12:20 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Exceptions in der Praxis on Sat, 02 Apr 2011 10:24:58 GMT]]></title><description><![CDATA[<p>Artchi schrieb:</p>
<blockquote>
<p>Assert ist für Programmierfehler in deinem eigenen Code. Aber nicht für aufrufenden Code.</p>
</blockquote>
<p>Doch, natürlich soll <code>assert</code> auch falsche Benutzung der Schnittstellen verhindern. Also Logikfehler wie <code>vector[invalidIndex]</code> oder <code>emptyVector.pop_back()</code> .</p>
<p>Die Exception <code>std::logic_error</code> macht normalerweise keinen Sinn. Denn sie führt nur dazu, das Programm nach einem Logikfehler weiterlaufen zu lassen. Aber nach einem Logikfehler funktioniert das Programm nicht mehr zuverlässig, es hätte gar nie soweit kommen dürfen. Ich kann mir zwar Ausnahmen wie die Freigabe kritischer Ressourcen vorstellen, aber generell sollte man für Logikfehler <code>assert</code> einsetzen. Dann wird man auch unmittelbar auf den Fehler aufmerksam gemacht und hat keinen Overhead im Release-Modus.</p>
<p>Grundsätzlich kann man sagen, dass Exceptions für Fälle konzipiert sind, die auch bei korrekt geschriebenem Code eintreten. Also unvorhersehbare Laufzeitfehler.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2043625</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2043625</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sat, 02 Apr 2011 10:24:58 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Exceptions in der Praxis on Sat, 02 Apr 2011 11:47:38 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Grundsätzlich kann man sagen, dass Exceptions für Fälle konzipiert sind, die auch bei korrekt geschriebenem Code eintreten.</p>
</blockquote>
<p>I agree <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="👍"
    /></p>
<p>Nexus schrieb:</p>
<blockquote>
<p>Also unvorhersehbare Laufzeitfehler.</p>
</blockquote>
<p>Meinst du diese Aussage stimmt auch, wenn man die Unterbrechungspunkte in<br />
boost mit der boost::thread_interrupted berücksichtigt?<br />
Ich glaube in dem Fall sind sie (häufig) vorhersehbar.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2043663</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2043663</guid><dc:creator><![CDATA[XSpille]]></dc:creator><pubDate>Sat, 02 Apr 2011 11:47:38 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Exceptions in der Praxis on Sat, 02 Apr 2011 15:26:42 GMT]]></title><description><![CDATA[<p>Exceptions machen imo besonders in der Systemprogrammierung Sinn.<br />
Es gibt in etwa 1 Millionen Gründe warum ein Systemaufruf fehlschlagen kann, in der Regel funktioniert er allerdings.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2043764</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2043764</guid><dc:creator><![CDATA[Ethon_]]></dc:creator><pubDate>Sat, 02 Apr 2011 15:26:42 GMT</pubDate></item></channel></rss>