<?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[Lebensdauer Default-Argumente]]></title><description><![CDATA[<p>Hi,</p>
<p>ist dies definiert und gültig:</p>
<pre><code class="language-cpp">class A 
{ 
    private:
                char * aa; 
    public: 
                A( char *t  = &quot;hhh&quot; ) : aa(t) {}
};
</code></pre>
<p>Schließlich müsste das temporäre Objekt nachm Konstruktordurchlauf zerstört werden und aa in Nirvana zeigen ...</p>
<p>Was sagt der Standard dazu ?</p>
<p>Edit:<br />
Bessere Alternative wäre dies hier:</p>
<pre><code class="language-cpp">char * defValue()
{
    static char * t = &quot;hhh&quot;;
    return t;
}
// ...
 A( char *t  = defValue() ) : aa(t) {}
</code></pre>
<p>... ja, std::string verwenden, es geht mir aber ums Verhalten von C++ in diesem Fall.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/210765/lebensdauer-default-argumente</link><generator>RSS for Node</generator><lastBuildDate>Tue, 13 Oct 2026 17:31:08 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/210765.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 14 Apr 2008 21:40:04 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Lebensdauer Default-Argumente on Mon, 14 Apr 2008 21:48:19 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>ist dies definiert und gültig:</p>
<pre><code class="language-cpp">class A 
{ 
    private:
                char * aa; 
    public: 
                A( char *t  = &quot;hhh&quot; ) : aa(t) {}
};
</code></pre>
<p>Schließlich müsste das temporäre Objekt nachm Konstruktordurchlauf zerstört werden und aa in Nirvana zeigen ...</p>
<p>Was sagt der Standard dazu ?</p>
<p>Edit:<br />
Bessere Alternative wäre dies hier:</p>
<pre><code class="language-cpp">char * defValue()
{
    static char * t = &quot;hhh&quot;;
    return t;
}
// ...
 A( char *t  = defValue() ) : aa(t) {}
</code></pre>
<p>... ja, std::string verwenden, es geht mir aber ums Verhalten von C++ in diesem Fall.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1492146</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1492146</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Mon, 14 Apr 2008 21:48:19 GMT</pubDate></item><item><title><![CDATA[Reply to Lebensdauer Default-Argumente on Mon, 14 Apr 2008 21:49:09 GMT]]></title><description><![CDATA[<p>aa zeigt nicht auf das temporäre Objekt, sondern auf das Stringliteral &quot;hhh&quot; (worauf das temporäre Objekt auch gezeigt hat). Stringliterale haben statische Speicherdauer.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1492149</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1492149</guid><dc:creator><![CDATA[Bashar]]></dc:creator><pubDate>Mon, 14 Apr 2008 21:49:09 GMT</pubDate></item><item><title><![CDATA[Reply to Lebensdauer Default-Argumente on Mon, 14 Apr 2008 23:17:24 GMT]]></title><description><![CDATA[<p>Bashar schrieb:</p>
<blockquote>
<p>Stringliterale haben statische Speicherdauer.</p>
</blockquote>
<p>Danke für die Antwort, jetzt ist mir alles klar <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="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1492162</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1492162</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Mon, 14 Apr 2008 23:17:24 GMT</pubDate></item><item><title><![CDATA[Reply to Lebensdauer Default-Argumente on Tue, 15 Apr 2008 07:20:30 GMT]]></title><description><![CDATA[<p>Und wie siehts mit &quot;normalen Default-Objekten&quot; aus ? (also ohne static Membern)</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1492230</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1492230</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Tue, 15 Apr 2008 07:20:30 GMT</pubDate></item><item><title><![CDATA[Reply to Lebensdauer Default-Argumente on Tue, 15 Apr 2008 09:33:52 GMT]]></title><description><![CDATA[<p>Hier ist weit und breit kein temporäres Objekt in Sicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1492282</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1492282</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Tue, 15 Apr 2008 09:33:52 GMT</pubDate></item><item><title><![CDATA[Reply to Lebensdauer Default-Argumente on Tue, 15 Apr 2008 10:51:39 GMT]]></title><description><![CDATA[<p>camper schrieb:</p>
<blockquote>
<p>Hier ist weit und breit kein temporäres Objekt in Sicht.</p>
</blockquote>
<p>DAS hatte Bashar auch schon entdeckt. <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>OK, also meine Frage mal mit Code:<br />
1.)</p>
<pre><code class="language-cpp">void f(std::string&amp; s = std::string(&quot;Simon2&quot;));
</code></pre>
<p>Haben wir hier ein temporäres Objekt ? Wenn ja: Wie lange lebt es ?</p>
<p>2.)<br />
Wie sieht die Situation bei</p>
<pre><code class="language-cpp">void f(std::string const&amp; s = std::string(&quot;Simon2&quot;));
</code></pre>
<p>aus ?</p>
<p>3.)<br />
Wird bei</p>
<pre><code class="language-cpp">void f(std::string s = std::string(&quot;Simon2&quot;));
</code></pre>
<p>noch eines erzeugt und s per CpyCtor konstruiert ? Darf der Compiler die Konstruktion ggf. &quot;abkürzen&quot; ?</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1492311</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1492311</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Tue, 15 Apr 2008 10:51:39 GMT</pubDate></item><item><title><![CDATA[Reply to Lebensdauer Default-Argumente on Tue, 15 Apr 2008 11:01:47 GMT]]></title><description><![CDATA[<p>Zu 1.) und 2.) gab es die Tage schonmal folgendes in <a href="http://c-plusplus.net/forum/viewtopic-var-t-is-210594.html" rel="nofollow">http://c-plusplus.net/forum/viewtopic-var-t-is-210594.html</a></p>
<p>camper schrieb:</p>
<blockquote>
<p>Ein temporäres Objekt, dass an einen Refernzparameter eines Funktionsaufrufes gebunden wird, lebt bis zum Ende des vollständigen Ausdrucks, der den Funktionsaufruf enthält .</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/1492319</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1492319</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Tue, 15 Apr 2008 11:01:47 GMT</pubDate></item><item><title><![CDATA[Reply to Lebensdauer Default-Argumente on Tue, 15 Apr 2008 11:42:22 GMT]]></title><description><![CDATA[<ol>
<li>ist nicht möglich.</li>
</ol>
<blockquote>
<p>3.)<br />
Wird bei</p>
<pre><code class="language-cpp">void f(std::string s = std::string(&quot;Simon2&quot;));
</code></pre>
<p>noch eines erzeugt und s per CpyCtor konstruiert ? Darf der Compiler die Konstruktion ggf. &quot;abkürzen&quot; ?</p>
</blockquote>
<p>ja und ja. Es gibt hinsichtlich der Auswertung keinen Unterschied zwischen einem Defaultargument und einem Funktionsaufruf, der das Argument explizit übergibt. Unterschiede bestehen lediglich im Namelookup - das spielt aber für diese Frage keine Rolle.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1492334</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1492334</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Tue, 15 Apr 2008 11:42:22 GMT</pubDate></item><item><title><![CDATA[Reply to Lebensdauer Default-Argumente on Tue, 15 Apr 2008 12:38:44 GMT]]></title><description><![CDATA[<p>LordJaxom schrieb:</p>
<blockquote>
<p>Zu 1.) und 2.) gab es die Tage schonmal folgendes in <a href="http://c-plusplus.net/forum/viewtopic-var-t-is-210594.html" rel="nofollow">http://c-plusplus.net/forum/viewtopic-var-t-is-210594.html</a></p>
<p>camper schrieb:</p>
<blockquote>
<p>Ein temporäres Objekt, dass an einen Refernzparameter eines Funktionsaufrufes gebunden wird, lebt bis zum Ende des vollständigen Ausdrucks, der den Funktionsaufruf enthält .</p>
</blockquote>
</blockquote>
<p>Das zusammen mit</p>
<p>camper schrieb:</p>
<blockquote>
<p>...Es gibt hinsichtlich der Auswertung keinen Unterschied zwischen einem Defaultargument und einem Funktionsaufruf, der das Argument explizit übergibt....</p>
</blockquote>
<p>hilft mir schon deutlich weiter.<br />
Noch eine Nachfrage:<br />
Ist</p>
<pre><code class="language-cpp">void f(std::string&amp; s);

f(std::string(&quot;Simon2&quot;));
</code></pre>
<p>dann auch verboten oder hört die Analogie da auf ?</p>
<p>Und nochmal zur Sicherheit:</p>
<pre><code class="language-cpp">void f(std::string const &amp; s = std::string(&quot;Simon2&quot;));
</code></pre>
<p>ist also erlaubt, ja ?</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1492367</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1492367</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Tue, 15 Apr 2008 12:38:44 GMT</pubDate></item><item><title><![CDATA[Reply to Lebensdauer Default-Argumente on Tue, 15 Apr 2008 23:09:10 GMT]]></title><description><![CDATA[<p>Simon2 schrieb:</p>
<blockquote>
<p>Noch eine Nachfrage:<br />
Ist</p>
<pre><code class="language-cpp">void f(std::string&amp; s);

f(std::string(&quot;Simon2&quot;));
</code></pre>
<p>dann auch verboten oder hört die Analogie da auf ?</p>
</blockquote>
<p>Ja, ist verboten, da ein temporäres Objekt nicht an eine non-const Referenz gebunden werden kann.</p>
<p>Simon2 schrieb:</p>
<blockquote>
<p>Und nochmal zur Sicherheit:</p>
<pre><code class="language-cpp">void f(std::string const &amp; s = std::string(&quot;Simon2&quot;));
</code></pre>
<p>ist also erlaubt, ja ?</p>
</blockquote>
<p>Ich denke mal ja <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="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1492684</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1492684</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Tue, 15 Apr 2008 23:09:10 GMT</pubDate></item><item><title><![CDATA[Reply to Lebensdauer Default-Argumente on Wed, 16 Apr 2008 00:29:52 GMT]]></title><description><![CDATA[<p>interessant wird es ja auch erst bei</p>
<pre><code class="language-cpp">void foo (string&amp;);

foo (string() = &quot;foo&quot;);
</code></pre>
<p><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="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1492692</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1492692</guid><dc:creator><![CDATA[queer_boy]]></dc:creator><pubDate>Wed, 16 Apr 2008 00:29:52 GMT</pubDate></item><item><title><![CDATA[Reply to Lebensdauer Default-Argumente on Wed, 16 Apr 2008 00:47:12 GMT]]></title><description><![CDATA[<p>queer_boy schrieb:</p>
<blockquote>
<p>interessant wird es ja auch erst bei</p>
<pre><code class="language-cpp">void foo (string&amp;);

foo (string() = &quot;foo&quot;);
</code></pre>
<p><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="🙂"
    /></p>
</blockquote>
<p>Interessant ist auch</p>
<pre><code class="language-cpp">std::complex&lt;double&gt; a = 1, b = 2, c = 3;
const std::complex&lt;double&gt;&amp; d = a + b + c;
const std::complex&lt;double&gt;&amp; e = ( a + b ) += c;
std::cout &lt;&lt; d; // ok
std::cout &lt;&lt; e; // boom
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1492697</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1492697</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Wed, 16 Apr 2008 00:47:12 GMT</pubDate></item></channel></rss>