<?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[Zeiger als Rückgabewert]]></title><description><![CDATA[<p>Hallo alle zusammen,<br />
ich arbeite aktuell das Buck “C++ - Das umfassende Handbuch“ durch. Hier gibt es im Kapitel Container, Iteratoren, Algorithmen und Hilfsmittel ein etwas retrolastiges Beispiel das mir einfach nicht ganz klar werden will. Hier geht es um eine selbst geschriebene std::find() Funktion die wie folgt aussieht:</p>
<pre><code>auto find(int* begin, int* end, const int&amp; val) -&gt; int*
{
	for (int* it = begin; it != end; ++it)
	{
		if (*it == val)
			return it;
	}
	return end;
}
</code></pre>
<p>Mein Verständnisproblem liegt in der Rückgabe von it. Während end ja die Funktion quasi nur durchläuft und entsprechend auch nach der Funktion weiter existiert, ist doch it eigentlich eine lokale Variable und sollte nach dem Funktionsaufruf zerstört werden, oder etwa nicht? Wie kann das Beispiel aber trotzdem funktionieren? Erfolgt hier intern etwas das ich nicht sehe? Sowas wie std::move() vielleicht? Ich wäre euch wirklich dankbar wenn mir da jemand mal auf die Sprünge helfen könnte.</p>
<p>Beste Grüße und vielen Dank<br />
pHelloWorld</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/331985/zeiger-als-rückgabewert</link><generator>RSS for Node</generator><lastBuildDate>Wed, 29 Apr 2026 14:42:03 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/331985.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 01 Apr 2015 18:43:59 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Zeiger als Rückgabewert on Wed, 01 Apr 2015 18:43:59 GMT]]></title><description><![CDATA[<p>Hallo alle zusammen,<br />
ich arbeite aktuell das Buck “C++ - Das umfassende Handbuch“ durch. Hier gibt es im Kapitel Container, Iteratoren, Algorithmen und Hilfsmittel ein etwas retrolastiges Beispiel das mir einfach nicht ganz klar werden will. Hier geht es um eine selbst geschriebene std::find() Funktion die wie folgt aussieht:</p>
<pre><code>auto find(int* begin, int* end, const int&amp; val) -&gt; int*
{
	for (int* it = begin; it != end; ++it)
	{
		if (*it == val)
			return it;
	}
	return end;
}
</code></pre>
<p>Mein Verständnisproblem liegt in der Rückgabe von it. Während end ja die Funktion quasi nur durchläuft und entsprechend auch nach der Funktion weiter existiert, ist doch it eigentlich eine lokale Variable und sollte nach dem Funktionsaufruf zerstört werden, oder etwa nicht? Wie kann das Beispiel aber trotzdem funktionieren? Erfolgt hier intern etwas das ich nicht sehe? Sowas wie std::move() vielleicht? Ich wäre euch wirklich dankbar wenn mir da jemand mal auf die Sprünge helfen könnte.</p>
<p>Beste Grüße und vielen Dank<br />
pHelloWorld</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2448780</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2448780</guid><dc:creator><![CDATA[pHelloWorld]]></dc:creator><pubDate>Wed, 01 Apr 2015 18:43:59 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger als Rückgabewert on Wed, 01 Apr 2015 19:05:08 GMT]]></title><description><![CDATA[<p>Es wird einfach eine Kopie des Zeigers zurückgegeben, das ist wie return val. Oder return 5.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2448783</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2448783</guid><dc:creator><![CDATA[Nathan]]></dc:creator><pubDate>Wed, 01 Apr 2015 19:05:08 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger als Rückgabewert on Wed, 01 Apr 2015 19:19:04 GMT]]></title><description><![CDATA[<p>Erstmal vielen Dank für die schnelle Antwort. Das heißt also wenn ich in einer Funktion einen lokalen Zeiger erzeuge der aber nicht auf eine lokale Variable zeigt dann wird das Ganze einfach als call by value zurückgegeben und eine Kopie erstellt. Da hab ich es mir selbst wohl kompliziert gemacht als es ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2448786</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2448786</guid><dc:creator><![CDATA[pHelloWorld]]></dc:creator><pubDate>Wed, 01 Apr 2015 19:19:04 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger als Rückgabewert on Wed, 01 Apr 2015 21:17:25 GMT]]></title><description><![CDATA[<p>Es ist schon wichtig, Pointer und Pointee auseinander zu halten. Natürlich kannst Du aus einer Funktion einen Zeiger zurückgeben. Du solltest nur sicherstellen, dass der auch gültig ist. In Deinem Fall gibt's da keine Probleme. <code>it</code> zeigt auf eines der Objekte, was in dem Feld des Aufrufers liegt. <code>it</code> speichert also die Adresse und die wird einfach zurückgegeben. Ob die Variable <code>it</code> oder sonst wie heißt, oder ob sie &quot;lokal&quot; ist oder nicht, spielt da keine Rolle.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2448803</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2448803</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Wed, 01 Apr 2015 21:17:25 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger als Rückgabewert on Thu, 02 Apr 2015 03:14:13 GMT]]></title><description><![CDATA[<p>Mit anderen Worten: Der Zeiger wird am Leben erhalten, aber zwingend das, worauf er zeigt.<br />
Ist das lokal in der Funktion, wird es beim Verlassen zerstör.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2448811</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2448811</guid><dc:creator><![CDATA[Nathan]]></dc:creator><pubDate>Thu, 02 Apr 2015 03:14:13 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger als Rückgabewert on Thu, 02 Apr 2015 05:08:54 GMT]]></title><description><![CDATA[<pre><code>-&gt; int*
</code></pre>
<p>Was bedeutet das ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2448813</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2448813</guid><dc:creator><![CDATA[hu_?]]></dc:creator><pubDate>Thu, 02 Apr 2015 05:08:54 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger als Rückgabewert on Thu, 02 Apr 2015 05:28:38 GMT]]></title><description><![CDATA[<pre><code>auto func(params) -&gt; return_type 
{}
</code></pre>
<pre><code>template &lt;typename T, typename U&gt;
auto sum(T a, U b) -&gt; decltype(a+b) // nur so möglich.
{}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2448815</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2448815</guid><dc:creator><![CDATA[5cript]]></dc:creator><pubDate>Thu, 02 Apr 2015 05:28:38 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger als Rückgabewert on Thu, 02 Apr 2015 10:20:34 GMT]]></title><description><![CDATA[<p>hu_? schrieb:</p>
<blockquote>
<pre><code>-&gt; int*
</code></pre>
<p>Was bedeutet das ?</p>
</blockquote>
<p>Das ist die aktuelle C++11 Rückgabesyntax.</p>
<p>Danke nochmal an alle für die Antworten. Das hat mir sehr geholfen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2448855</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2448855</guid><dc:creator><![CDATA[pHelloWorld]]></dc:creator><pubDate>Thu, 02 Apr 2015 10:20:34 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger als Rückgabewert on Thu, 02 Apr 2015 11:31:37 GMT]]></title><description><![CDATA[<p>5cript schrieb:</p>
<blockquote>
<pre><code>template &lt;typename T, typename U&gt;
auto sum(T a, U b) -&gt; decltype(a+b) // nur so möglich.
{}
</code></pre>
</blockquote>
<pre><code>template &lt;typename T, typename U&gt;
decltype(std::declval&lt;T&amp;&gt;() + std::declval&lt;U&amp;&gt;()) sum(T a, U b)
{return a+b;}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2448869</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2448869</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Thu, 02 Apr 2015 11:31:37 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger als Rückgabewert on Thu, 02 Apr 2015 16:40:03 GMT]]></title><description><![CDATA[<p>pHelloWorld schrieb:</p>
<blockquote>
<p>hu_? schrieb:</p>
<blockquote>
<pre><code>-&gt; int*
</code></pre>
<p>Was bedeutet das ?</p>
</blockquote>
<p>Das ist die aktuelle C++11 Rückgabesyntax.</p>
</blockquote>
<p>Echt jetzt ? Nur bei &quot;auto&quot; oder generell ? Stichwort zum Nachlesen ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2448915</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2448915</guid><dc:creator><![CDATA[hu_?]]></dc:creator><pubDate>Thu, 02 Apr 2015 16:40:03 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger als Rückgabewert on Fri, 03 Apr 2015 15:43:08 GMT]]></title><description><![CDATA[<pre><code>Mit anderen Worten: Der Zeiger wird am Leben erhalten, aber zwingend das, worauf er zeigt.
Ist das lokal in der Funktion, wird es beim Verlassen zerstör.
</code></pre>
<p>Somit wäre das auch gültig ?</p>
<pre><code>int* foo(int x){

   int* y;
   y = new int[x];
   return y ;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2449028</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2449028</guid><dc:creator><![CDATA[pointeee]]></dc:creator><pubDate>Fri, 03 Apr 2015 15:43:08 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger als Rückgabewert on Fri, 03 Apr 2015 15:52:34 GMT]]></title><description><![CDATA[<p>Ja, das wäre gültig.<br />
Da du aber rohe besitzende Zeiger verwendest, ist das nicht sonderlich schön.<br />
Nimm lieber std::unique_ptr.</p>
<p>@hu_?:<br />
Nennt sich traling return type:</p>
<pre><code>T func();
// wird zu
auto func() -&gt; T;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2449029</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2449029</guid><dc:creator><![CDATA[Nathan]]></dc:creator><pubDate>Fri, 03 Apr 2015 15:52:34 GMT</pubDate></item></channel></rss>