<?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[Frage zu Exception Handling und STL-Containern in ISO-C++]]></title><description><![CDATA[<p>Morgen,</p>
<p>ich hätte eine vermutlich einfache Frage:</p>
<p>Wenn ich auf einen STL-Container (genauer: einen vector) mit .at() zugreife, erhalte ich bei Zugriff über das Ende des Containers hinaus eine Exception. DAS läuft auch, wie ich es erwarte.</p>
<p>Wenn ich jedoch mittels operator[] auf den Container zugreife, sollte ich eine Exception erhalten oder nicht? (Ich meine: nicht!).</p>
<p>Das Problem:<br />
Wenn ich VS2003 nutze, und eine catch(...) verwende, wird diese angesprungen, wenn ich mittels operator[] auf ein Element ausserhalb des vectors zugreife. Mit dem G++ geschieht dies nicht.</p>
<p>DIE FRAGE:<br />
Definiert der C++-Standard explizit, daß operator[] für STL-Container keine Exceptions wirft, oder ist das der Implementierung überlassen? Wie sieht das mit .at() aus?</p>
<p>Damit will ich die Frage klären, WER jetzt standardkonform ist, und ob Microsoft(bzw. Dinkumware, wenn ich mich recht erinnere) sauber gearbeitet hat, oder das GNU STDLIB Team oder beide <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>Danke im Voraus.</p>
<p>Sid</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/159347/frage-zu-exception-handling-und-stl-containern-in-iso-c</link><generator>RSS for Node</generator><lastBuildDate>Thu, 10 Sep 2026 14:42:34 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/159347.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 14 Sep 2006 09:40:06 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Frage zu Exception Handling und STL-Containern in ISO-C++ on Thu, 14 Sep 2006 09:40:06 GMT]]></title><description><![CDATA[<p>Morgen,</p>
<p>ich hätte eine vermutlich einfache Frage:</p>
<p>Wenn ich auf einen STL-Container (genauer: einen vector) mit .at() zugreife, erhalte ich bei Zugriff über das Ende des Containers hinaus eine Exception. DAS läuft auch, wie ich es erwarte.</p>
<p>Wenn ich jedoch mittels operator[] auf den Container zugreife, sollte ich eine Exception erhalten oder nicht? (Ich meine: nicht!).</p>
<p>Das Problem:<br />
Wenn ich VS2003 nutze, und eine catch(...) verwende, wird diese angesprungen, wenn ich mittels operator[] auf ein Element ausserhalb des vectors zugreife. Mit dem G++ geschieht dies nicht.</p>
<p>DIE FRAGE:<br />
Definiert der C++-Standard explizit, daß operator[] für STL-Container keine Exceptions wirft, oder ist das der Implementierung überlassen? Wie sieht das mit .at() aus?</p>
<p>Damit will ich die Frage klären, WER jetzt standardkonform ist, und ob Microsoft(bzw. Dinkumware, wenn ich mich recht erinnere) sauber gearbeitet hat, oder das GNU STDLIB Team oder beide <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>Danke im Voraus.</p>
<p>Sid</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1137124</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1137124</guid><dc:creator><![CDATA[Sid2K6]]></dc:creator><pubDate>Thu, 14 Sep 2006 09:40:06 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Exception Handling und STL-Containern in ISO-C++ on Thu, 14 Sep 2006 09:45:13 GMT]]></title><description><![CDATA[<p>zugriff hinters arrayende ist undefiniert.<br />
da darf der rechner abschmieren, darf deine platte löschen, darf dir nen dialer installieren und nen erpresserbrief ans weisse haus schicken. alles vom standard gedeckt.<br />
er darf unter anderem auch ne exception werfen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1137126</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1137126</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Thu, 14 Sep 2006 09:45:13 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Exception Handling und STL-Containern in ISO-C++ on Thu, 14 Sep 2006 09:47:09 GMT]]></title><description><![CDATA[<p>Sid2K6 schrieb:</p>
<blockquote>
<p>Das Problem:<br />
Wenn ich VS2003 nutze, und eine catch(...) verwende, wird diese angesprungen,</p>
</blockquote>
<p>bei MS fängt catch(...) afair auch schutzverletzungen und divisionen durch 0, ganz ohne daß die lib was damit zu tun hat.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1137127</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1137127</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Thu, 14 Sep 2006 09:47:09 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Exception Handling und STL-Containern in ISO-C++ on Thu, 14 Sep 2006 09:49:27 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>zugriff hinters arrayende ist undefiniert.<br />
da darf der rechner abschmieren, darf deine platte löschen, darf dir nen dialer installieren und nen erpresserbrief ans weisse haus schicken. alles vom standard gedeckt.<br />
er darf unter anderem auch ne exception werfen.</p>
</blockquote>
<p>... oder rogue/nethack starten... <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>
<blockquote>
<p>I *heart* undefined behaviour!</p>
</blockquote>
<p>Besten Dank für die prompte Antwort. Dann hoffen wir mal, das Dinkumware das auch in der kommerziellen Version ihrer Lib zu handhaben, sonst haben wir hier ein Problem. (Was bin ich immer glücklich, wenn sowas nicht meine Schuld ist...).</p>
<p>Ich werde sicherlich nicht durch den Code surfen und... naja, vermutlich wirds doch mein Job... <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1137130</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1137130</guid><dc:creator><![CDATA[Sid2K6]]></dc:creator><pubDate>Thu, 14 Sep 2006 09:49:27 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Exception Handling und STL-Containern in ISO-C++ on Thu, 14 Sep 2006 09:51:21 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>Sid2K6 schrieb:</p>
<blockquote>
<p>Das Problem:<br />
Wenn ich VS2003 nutze, und eine catch(...) verwende, wird diese angesprungen,</p>
</blockquote>
<p>bei MS fängt catch(...) afair auch schutzverletzungen und divisionen durch 0, ganz ohne daß die lib was damit zu tun hat.</p>
</blockquote>
<p>Urgs....</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1137134</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1137134</guid><dc:creator><![CDATA[Sid2K6]]></dc:creator><pubDate>Thu, 14 Sep 2006 09:51:21 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Exception Handling und STL-Containern in ISO-C++ on Thu, 14 Sep 2006 09:55:12 GMT]]></title><description><![CDATA[<p>Jetzt weiss ich auch, was dem Kollegen vermutlich passiert ist:</p>
<p>Entwicklung unter VS. Zugriff über Vektor schlug fehl. catch(...) wird angesprungen. Der Kollege denkt: aha, eine out_out_range exception, prüft aber den Typ nicht ab und behandelt damit eigentlich die Schutzverletzung, die durch den illegalen Zugriff ausgelöst wurde.</p>
<p>Kollege benutzt dieses Handling weiterhin - und DESWEGEN funktionierts mit dem G++ nicht.</p>
<p>Volkard: Vielen, vielen Dank. Das macht die Probleme etwas klarer...</p>
<p>&lt;scherz&gt;<br />
Und Microsoft ist mitschuldig... wie immer... wenigstens einige Dinge ändern sich nie <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 />
&lt;/scherz&gt;</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1137139</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1137139</guid><dc:creator><![CDATA[Sid2K6]]></dc:creator><pubDate>Thu, 14 Sep 2006 09:55:12 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Exception Handling und STL-Containern in ISO-C++ on Thu, 14 Sep 2006 10:05:07 GMT]]></title><description><![CDATA[<p>Der VC++ Compiler implementiert imo Exceptions sehr seltsam.<br />
Es wird von MS empfohlen, bei diesem Compiler die propietären Makros TRY/CATCH zu verwenden.<br />
Mehr Infos findest du in einem MSDN Block namens &quot;Nifty Win32 Tips&quot; (o.ä.)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1137150</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1137150</guid><dc:creator><![CDATA[Headhunter]]></dc:creator><pubDate>Thu, 14 Sep 2006 10:05:07 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Exception Handling und STL-Containern in ISO-C++ on Thu, 14 Sep 2006 10:15:23 GMT]]></title><description><![CDATA[<p>Hasst du mal probiert, die MS version im release mode zu fahren und zu schauen was er dann macht ?<br />
IMHO checkt MS die speicherverletzung nur im debug modus ab, also hat er die chance auch nur im debug modus, die exception zu werfen ....</p>
<p>Weiterhin ist mir unklar, wieso dieses undefinierte verhalten vom compiler fuer dich relevant ist ?<br />
Im normalen code sollte der compiler nie und nimmer ne chance haben, sich undefiniert zu verhalten !!!<br />
<div class="plugin-markdown"><input type="checkbox" id="checkbox171217" checked="true" /><label for="checkbox171217">wenn X &gt;= vector.size() ist undefiniert, auch im ANSII c++ standard !!! Es spielt also keinerlei rolle was dein compiler da macht.</label></div></p>
<p>Kannst du 100% sicher sein, das X immer kleiner wie size ist -&gt; kannst du den [] operator verwenden</p>
<p>besteht auch nur die 0.000000000001% ige chance, das X &gt;= size ist, Hasst du at() zu verwenden und kannst die exception abfangen.<br />
Alles andere ist mauschelei und wuerdest du von deinem Projektleiter um die ohren geworfen bekommen , und das zu recht.</p>
<p>Ciao ....</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1137157</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1137157</guid><dc:creator><![CDATA[RHBaum]]></dc:creator><pubDate>Thu, 14 Sep 2006 10:15:23 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Exception Handling und STL-Containern in ISO-C++ on Thu, 14 Sep 2006 10:48:13 GMT]]></title><description><![CDATA[<p>Ich hab den Code nur im Review zu Gesicht bekommen.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/3842">@RHBaum</a> Danke für den Tipp mit Debug/Release. Das bedeutet nämlich, das kein Weg um eine Korrektur dieser Probleme führt.</p>
<p>Wegen der Relevanz: Ich war nicht 100% sicher, ob das Verhalten undefiniert ist, deswegen ja die ursprüngliche Frage. Es lag allerdings, zugegebenerweise, ziemlich nahe. Auf gut Deutsch: Volkard hat meine Befürchtungen bestätigt.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/512">@Headhunter</a>: Danke für den Tipp, aber OS- oder herstellerspezifische Konstrukte kommen nicht in Frage.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1137184</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1137184</guid><dc:creator><![CDATA[Sid2K6]]></dc:creator><pubDate>Thu, 14 Sep 2006 10:48:13 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Exception Handling und STL-Containern in ISO-C++ on Thu, 14 Sep 2006 12:14:52 GMT]]></title><description><![CDATA[<p>Der VC kann verschiedene Exceptionmodele benutzen und eines davon ist eine C++ Version der Struktured-Exceptions die von der WinAPI und Windows im allgemeinen benutzt werden.</p>
<p>Bei einer Zugriffsverletzung wird eine Struktured-Exception geworfen.</p>
<p>Eine Nebenwirkung dieses VC Models ist, dass auch Struktured-Exceptions gefangen werden. Ich glaub die haben unsigned int als Type. Eine weitere Wirkung ist, dass sebst bei einer Speicherverletzung die Destuktoren aufgerufen werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1137250</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1137250</guid><dc:creator><![CDATA[Ben04]]></dc:creator><pubDate>Thu, 14 Sep 2006 12:14:52 GMT</pubDate></item></channel></rss>