<?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::what-Rückgabewert]]></title><description><![CDATA[<p>Wenn ich von std::exception ableite und die what-Funktion überschreibe, ist es dann überhaupt richtig, sowas hier zu schreiben?</p>
<pre><code class="language-cpp">const char *what()
{
    return &quot;Mein Fehler&quot;;
}
</code></pre>
<p>Weil wenn jetzt jemand im Quellcode das hier macht:</p>
<pre><code class="language-cpp">catch (MeineException ex)
{
    const char *message = ex.what();
}
</code></pre>
<p>dann wird der String ja nicht kopiert, sondern nur die Adresse übergeben. Aber die Adresse gehört ja zu einer lokalen Variable und kann somit nach dem Aufruf wieder ungültig sein. Sehe ich das richtig? Und wenn ja, wie ruft man dann in einer Funktion, die const char* zurückgibt, den Rückgabewert auf?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/269920/std-exception-what-rückgabewert</link><generator>RSS for Node</generator><lastBuildDate>Sun, 30 Aug 2026 19:57:09 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/269920.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 03 Jul 2010 18:47:28 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to std::exception::what-Rückgabewert on Sat, 03 Jul 2010 18:47:28 GMT]]></title><description><![CDATA[<p>Wenn ich von std::exception ableite und die what-Funktion überschreibe, ist es dann überhaupt richtig, sowas hier zu schreiben?</p>
<pre><code class="language-cpp">const char *what()
{
    return &quot;Mein Fehler&quot;;
}
</code></pre>
<p>Weil wenn jetzt jemand im Quellcode das hier macht:</p>
<pre><code class="language-cpp">catch (MeineException ex)
{
    const char *message = ex.what();
}
</code></pre>
<p>dann wird der String ja nicht kopiert, sondern nur die Adresse übergeben. Aber die Adresse gehört ja zu einer lokalen Variable und kann somit nach dem Aufruf wieder ungültig sein. Sehe ich das richtig? Und wenn ja, wie ruft man dann in einer Funktion, die const char* zurückgibt, den Rückgabewert auf?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1920897</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1920897</guid><dc:creator><![CDATA[k]]></dc:creator><pubDate>Sat, 03 Jul 2010 18:47:28 GMT</pubDate></item><item><title><![CDATA[Reply to std::exception::what-Rückgabewert on Sat, 03 Jul 2010 19:07:30 GMT]]></title><description><![CDATA[<p>k schrieb:</p>
<blockquote>
<p>Sehe ich das richtig?</p>
</blockquote>
<p>Nein, siehst du nicht richtig. Was du zurück gibst ist keine lokale Variable, sondern ein Literal. Dieses ist während des ganzen Programmes gültig.</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1920902</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1920902</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Sat, 03 Jul 2010 19:07:30 GMT</pubDate></item><item><title><![CDATA[Reply to std::exception::what-Rückgabewert on Sat, 03 Jul 2010 20:43:49 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">catch (MeineException ex)
</code></pre>
<p>Nebenbei: Ich würde Exceptions als Referenz fangen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1920938</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1920938</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sat, 03 Jul 2010 20:43:49 GMT</pubDate></item><item><title><![CDATA[Reply to std::exception::what-Rückgabewert on Sat, 03 Jul 2010 20:47:59 GMT]]></title><description><![CDATA[<p>Mal eine andere Frage:</p>
<p>Warum liefert what() eigentlich einen const char*<br />
und keinen const std::string&amp;?<br />
Immerhin handelt es sich bei Exceptions ja um ein C++ Feature</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1920940</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1920940</guid><dc:creator><![CDATA[C++ Exception]]></dc:creator><pubDate>Sat, 03 Jul 2010 20:47:59 GMT</pubDate></item><item><title><![CDATA[Reply to std::exception::what-Rückgabewert on Sat, 03 Jul 2010 21:02:37 GMT]]></title><description><![CDATA[<p>C++ Exception schrieb:</p>
<blockquote>
<p>Mal eine andere Frage:</p>
<p>Warum liefert what() eigentlich einen const char*<br />
und keinen const std::string&amp;?<br />
Immerhin handelt es sich bei Exceptions ja um ein C++ Feature</p>
</blockquote>
<p>stell dir mal vor, bad_alloc würde erst noch speicherplatz für einen string beschaffen müssen...<br />
und solche fehlermeldungen sind ja im prinzip nichts, was erst zur laufzeit feststeht oder zusammengebastelt werden... (auch wenn letzteres doch viele machen)</p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1920948</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1920948</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Sat, 03 Jul 2010 21:02:37 GMT</pubDate></item><item><title><![CDATA[Reply to std::exception::what-Rückgabewert on Sat, 03 Jul 2010 21:12:21 GMT]]></title><description><![CDATA[<p>Allerdings sind sie nicht ganz einheitlich beim Konstruktor.</p>
<pre><code class="language-cpp">runtime_error::runtime_error(const std::string&amp;);
exception::exception(const char*);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1920953</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1920953</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sat, 03 Jul 2010 21:12:21 GMT</pubDate></item><item><title><![CDATA[Reply to std::exception::what-Rückgabewert on Sat, 03 Jul 2010 21:19:52 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Allerdings sind sie nicht ganz einheitlich beim Konstruktor.</p>
<pre><code class="language-cpp">runtime_error::runtime_error(const std::string&amp;);
exception::exception(const char*);
</code></pre>
</blockquote>
<p>finde ich aber nicht nur verständlich und nachvollziehbar sondern auch als durchaus bequem.<br />
ein runtime_error (wie der name schon sagt: er tritt erst zur laufzeit auf) kann imho zur compilezeit keinen wirklichen &quot;betreff&quot;(wie sagt man dazu eigtl^^) haben - dieser muss also zur runtime erst (unter Umständen) zusammengesetzt werden...</p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1920957</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1920957</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Sat, 03 Jul 2010 21:19:52 GMT</pubDate></item><item><title><![CDATA[Reply to std::exception::what-Rückgabewert on Sat, 03 Jul 2010 21:22:24 GMT]]></title><description><![CDATA[<p>unskilled schrieb:</p>
<blockquote>
<p>C++ Exception schrieb:</p>
<blockquote>
<p>Mal eine andere Frage:</p>
<p>Warum liefert what() eigentlich einen const char*<br />
und keinen const std::string&amp;?<br />
Immerhin handelt es sich bei Exceptions ja um ein C++ Feature</p>
</blockquote>
<p>stell dir mal vor, bad_alloc würde erst noch speicherplatz für einen string beschaffen müssen...<br />
und solche fehlermeldungen sind ja im prinzip nichts, was erst zur laufzeit feststeht oder zusammengebastelt werden... (auch wenn letzteres doch viele machen)</p>
<p>bb</p>
</blockquote>
<p>Ehrlich gesagt sehe ich das Problem nicht...<br />
Ein Exception-Objekt muss ja eh irgendwo erstellt werden.<br />
Wenn ich jetzt nen const std::string in das Objekt reinmache, ist das evtl. 4Byte(?)<br />
mehr, weil zu dem Zeiger noch eine Größe kommt.<br />
Oder wird der Inhalt des char array auch bei einem const std::string kopiert?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1920958</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1920958</guid><dc:creator><![CDATA[C++ Exception]]></dc:creator><pubDate>Sat, 03 Jul 2010 21:22:24 GMT</pubDate></item><item><title><![CDATA[Reply to std::exception::what-Rückgabewert on Sat, 03 Jul 2010 21:26:45 GMT]]></title><description><![CDATA[<p>C++ Exception schrieb:</p>
<blockquote>
<p>Oder wird der Inhalt des char array auch bei einem const std::string kopiert?</p>
</blockquote>
<p>Wenn es der Compiler nicht wegoptimieren kann, dann schon.<br />
Ich würde auch mal behaupten wollen, dass der Durchschnitts-Compiler es nicht kann - da gab es imho mal ne Diskussion hier.</p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1920960</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1920960</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Sat, 03 Jul 2010 21:26:45 GMT</pubDate></item></channel></rss>