<?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[Exceptions - std::string oder char*]]></title><description><![CDATA[<p>In den <a href="http://www.boost.org/community/error_handling.html" rel="nofollow">boost-guidelines für Exceptions steht</a>, in einer Exception-Klasse sollte man kein std::string-Objekt zu verwenden, da dieses ja wieder eine Exception werfen könnte. Die Standardbibliothek tut das aber trotzdem - z.B. in runtime_error.<br />
Warum und wie sollte man es selber halten?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/263384/exceptions-std-string-oder-char</link><generator>RSS for Node</generator><lastBuildDate>Sat, 05 Sep 2026 19:16:20 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/263384.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 19 Mar 2010 20:53:09 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Exceptions - std::string oder char* on Fri, 19 Mar 2010 20:53:09 GMT]]></title><description><![CDATA[<p>In den <a href="http://www.boost.org/community/error_handling.html" rel="nofollow">boost-guidelines für Exceptions steht</a>, in einer Exception-Klasse sollte man kein std::string-Objekt zu verwenden, da dieses ja wieder eine Exception werfen könnte. Die Standardbibliothek tut das aber trotzdem - z.B. in runtime_error.<br />
Warum und wie sollte man es selber halten?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1871473</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1871473</guid><dc:creator><![CDATA[wx++]]></dc:creator><pubDate>Fri, 19 Mar 2010 20:53:09 GMT</pubDate></item><item><title><![CDATA[Reply to Exceptions - std::string oder char* on Fri, 19 Mar 2010 22:02:03 GMT]]></title><description><![CDATA[<p>beim kopieren von strings kann es nur zu exceptions kommen, wenn der string wirklich neu konstruiert wird - standard-bibliotheken nutzen aber idR referenz-zähler und so muss nix umkopiert werden...</p>
<p>bei nem bad_alloc würde sich ein string natürlich eher weniger anbieten...^^ (da man sich nicht auf implementierungsdetails verlassen sollte - die nächste standard-lib bietet dieses feature eben nicht und eine exception beim konstruieren einer exception -&gt; BÄM!)<br />
ansonsten ist das relativ egal - und ein string ist natürlich bequemer und idR auch sinnvoller...</p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1871489</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1871489</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Fri, 19 Mar 2010 22:02:03 GMT</pubDate></item><item><title><![CDATA[Reply to Exceptions - std::string oder char* on Sat, 20 Mar 2010 09:59:02 GMT]]></title><description><![CDATA[<p>unskilled schrieb:</p>
<blockquote>
<p>... - standard-bibliotheken nutzen aber idR referenz-zähler und so muss nix umkopiert werden...</p>
</blockquote>
<p>Halte ich für eine gewagte Aussage, vor allem da sich solche Dinge schnell mal ändern können. COW hat nämlich auch einiges an Nachteile.</p>
<p>unskilled schrieb:</p>
<blockquote>
<p>... - und ein string ist natürlich bequemer und idR auch sinnvoller...</p>
</blockquote>
<p>wx++ schrieb:</p>
<blockquote>
<p>Warum und wie sollte man es selber halten?</p>
</blockquote>
<p>Ich fühle mich dazu geneigt hier eine Diskussion anzustossen, welche ganz im Sinne von diesem Thread sein dürfte:<br />
Wie sinnvoll ist es überhaupt einen <code>std::string</code> oder <code>char const*</code> in einer Exception zu liefern? Meine Alternative wäre grundsätzlich ein Fehlercode wie in C, könnte man allerdings auch als <code>enum</code> mitgeben.</p>
<p>Der Hintergrund dieser Überlegung betrifft zwei Punkte:<br />
1. Auf unterschiedliche Beschreibung kann ich sehr schlecht bis gar nicht reagieren. Ich kann somit die Beschreibung nur irgendwo in ein Log schreiben und das ist alles.<br />
2. Wenn ich die Fehlermeldungen in einer anderen Sprache haben möchte, bin ich ebenfalls aufgeschmissen.</p>
<p>Zeichenketten sind einfach etwas sehr absolutes und bereits fertiges. Die Fehlerbehandlung sollte nicht beim Ort geschehen, wo der Fehler geworfen wird. Ein Fehler wird dort behandelt, wo er gefangen wird und daher sollte dort auch die Fehlerbeschreibung entstehen. Über statische Funktionen könnte man ja immer noch die Standardfehlerbeschreibung anbieten.</p>
<p>Was meint ihr dazu?</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1871555</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1871555</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Sat, 20 Mar 2010 09:59:02 GMT</pubDate></item><item><title><![CDATA[Reply to Exceptions - std::string oder char* on Sat, 20 Mar 2010 10:14:41 GMT]]></title><description><![CDATA[<blockquote>
<p>Was meint ihr dazu?</p>
</blockquote>
<p>Was ist, wenn du die Information mitliefern willst, wo der Fehler aufgetreten ist?<br />
Außerdem bist du dann inkompatibel zu std::exception.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1871559</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1871559</guid><dc:creator><![CDATA[wx++]]></dc:creator><pubDate>Sat, 20 Mar 2010 10:14:41 GMT</pubDate></item><item><title><![CDATA[Reply to Exceptions - std::string oder char* on Sat, 20 Mar 2010 11:39:07 GMT]]></title><description><![CDATA[<p>wx++ schrieb:</p>
<blockquote>
<p>Was ist, wenn du die Information mitliefern willst, wo der Fehler aufgetreten ist?</p>
</blockquote>
<p>Sowas schreibt man bereits heute nicht in die Zeichenkette, sondern liefert es als zusätzliche Daten mit.</p>
<p>wx++ schrieb:</p>
<blockquote>
<p>Außerdem bist du dann inkompatibel zu std::exception.</p>
</blockquote>
<p>Das ist mir egal. Ich will ja eine neue Idee reinbringen. Alle Exception-Klassenhierarchien, welche ich bisher gesehen habe, hatten eine Beschreibung im geworfenen Objekt, worin ich allerdings keinerlei Vorteile sehe, eher nur Nachteile.</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1871582</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1871582</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Sat, 20 Mar 2010 11:39:07 GMT</pubDate></item><item><title><![CDATA[Reply to Exceptions - std::string oder char* on Sat, 20 Mar 2010 11:48:25 GMT]]></title><description><![CDATA[<blockquote>
<p>Sowas schreibt man bereits heute nicht in die Zeichenkette, sondern liefert es als zusätzliche Daten mit.</p>
</blockquote>
<p>Wobei wir wieder bei string vs char* wären.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1871586</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1871586</guid><dc:creator><![CDATA[wx++]]></dc:creator><pubDate>Sat, 20 Mar 2010 11:48:25 GMT</pubDate></item><item><title><![CDATA[Reply to Exceptions - std::string oder char* on Sat, 20 Mar 2010 11:54:40 GMT]]></title><description><![CDATA[<p>wx++ schrieb:</p>
<blockquote>
<blockquote>
<p>Sowas schreibt man bereits heute nicht in die Zeichenkette, sondern liefert es als zusätzliche Daten mit.</p>
</blockquote>
<p>Wobei wir wieder bei string vs char* wären.</p>
</blockquote>
<p>Für Funktionsnamen, Klassennamen usw. usf. nimmst du sowieso <code>char const*</code> , da du immer auf String-Literale verweisen kannst. Für die Zeile nimmst du einen <code>int</code> oder <code>unsigned int</code> .</p>
<p>Die von dir gestellte Frage bleibt nur für die Beschreibung zurück und da schlage ich eben als dritte Möglichkeit die Fehlercodes vor.</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1871589</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1871589</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Sat, 20 Mar 2010 11:54:40 GMT</pubDate></item><item><title><![CDATA[Reply to Exceptions - std::string oder char* on Sat, 20 Mar 2010 12:08:34 GMT]]></title><description><![CDATA[<p>wie oft logst du fkt-name und zeilennr mit? ich eigtl nie...<br />
der fehlercode erübrigt sich in 99% der fälle, weil die exception nur für diesen zweck ist...<br />
wenn nicht, würde ich die enum-lsg. aber befürworten.</p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1871591</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1871591</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Sat, 20 Mar 2010 12:08:34 GMT</pubDate></item><item><title><![CDATA[Reply to Exceptions - std::string oder char* on Sat, 20 Mar 2010 13:10:54 GMT]]></title><description><![CDATA[<p>unskilled schrieb:</p>
<blockquote>
<p>wie oft logst du fkt-name und zeilennr mit? ich eigtl nie...</p>
</blockquote>
<p>Ich eigentlich auch nie, ging mir nur um das Wenn, weil wx++ es aufgebracht hat.</p>
<p>unskilled schrieb:</p>
<blockquote>
<p>der fehlercode erübrigt sich in 99% der fälle, weil die exception nur für diesen zweck ist...</p>
</blockquote>
<p>Sehe ich nicht so. Meistens gibt es mehrere Gründe, wieso eine Exception geflogen kommen kann. Und ich würde halt eine allgemeine Hierachie aufbauen wollen, bzw. vorschlagen, dass zum Beispiel eine Grundklasse wie <code>std::exception</code> mit der Funktion <code>what</code> , nicht einen <code>char const*</code> sondern einen Fehlercode zurückliefern soll.</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1871620</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1871620</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Sat, 20 Mar 2010 13:10:54 GMT</pubDate></item><item><title><![CDATA[Reply to Exceptions - std::string oder char* on Sat, 20 Mar 2010 13:32:05 GMT]]></title><description><![CDATA[<p>wx++ schrieb:</p>
<blockquote>
<p>In den <a href="http://www.boost.org/community/error_handling.html" rel="nofollow">boost-guidelines für Exceptions steht</a>, in einer Exception-Klasse sollte man kein std::string-Objekt zu verwenden, da dieses ja wieder eine Exception werfen könnte. Die Standardbibliothek tut das aber trotzdem - z.B. in runtime_error.<br />
Warum und wie sollte man es selber halten?</p>
</blockquote>
<p>Das ist in der Standardbibliothek schlecht beziehungsweise gar nicht gelöst. Wenn man es genau nimmt, dann kann man kein std::string in eine Exception packen. Wenn du dir die Implementierung von einigen Compiler anschaust, dann siehst du, dass die intern ein char-Array als Member enthalten. In der Praxis bleibt dir aber eh nicht viel übrig außer abstürzen, wenn der Speicher wirklich voll ist, von daher: Lass es knallen.</p>
<p>Was auch oft eine Möglichkeit ist, ist folgendes:</p>
<pre><code class="language-cpp">class foo:public std::exception{
public:
  const char*what()const throw(){
    return typeid(*this).name();
  }
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1871628</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1871628</guid><dc:creator><![CDATA[Ben04]]></dc:creator><pubDate>Sat, 20 Mar 2010 13:32:05 GMT</pubDate></item></channel></rss>