<?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[Struct von einer Funktion zurückgeben]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe hier mehrere Funktionen, die jeweils Daten in Form einer Struct zurückgeben.</p>
<pre><code>Vector operator +(const Vector &amp;v1, const Vector &amp;v2) {
    return Vector(v1.x + v2.x, v1.y+v2.y, v1.z+v2.z);
}
</code></pre>
<p>Soweit ich weiß wird beim Zurückgeben aber eine Kopie meiner Struct zurückgegeben?<br />
Gibt es eine Möglichkeit das zu vermeiden? Ist es sinnvoll, die Funktion als inline zu deklarieren, oder macht es keinen unterschied, wenn ich sie seperat in einer cpp-Datei implementiere? Oder wird das alles bereits vom Compiler optimiert?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/305543/struct-von-einer-funktion-zurückgeben</link><generator>RSS for Node</generator><lastBuildDate>Sat, 08 Aug 2026 19:02:49 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/305543.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 01 Jul 2012 23:51:34 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Struct von einer Funktion zurückgeben on Sun, 01 Jul 2012 23:51:34 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe hier mehrere Funktionen, die jeweils Daten in Form einer Struct zurückgeben.</p>
<pre><code>Vector operator +(const Vector &amp;v1, const Vector &amp;v2) {
    return Vector(v1.x + v2.x, v1.y+v2.y, v1.z+v2.z);
}
</code></pre>
<p>Soweit ich weiß wird beim Zurückgeben aber eine Kopie meiner Struct zurückgegeben?<br />
Gibt es eine Möglichkeit das zu vermeiden? Ist es sinnvoll, die Funktion als inline zu deklarieren, oder macht es keinen unterschied, wenn ich sie seperat in einer cpp-Datei implementiere? Oder wird das alles bereits vom Compiler optimiert?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2229085</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2229085</guid><dc:creator><![CDATA[Unregistriert]]></dc:creator><pubDate>Sun, 01 Jul 2012 23:51:34 GMT</pubDate></item><item><title><![CDATA[Reply to Struct von einer Funktion zurückgeben on Mon, 02 Jul 2012 00:00:36 GMT]]></title><description><![CDATA[<p>Mach die Funktion inline und dann kann der Compiler die Kopie problemlos weglassen (Return value optimization, RVO).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2229086</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2229086</guid><dc:creator><![CDATA[rüdiger]]></dc:creator><pubDate>Mon, 02 Jul 2012 00:00:36 GMT</pubDate></item><item><title><![CDATA[Reply to Struct von einer Funktion zurückgeben on Mon, 02 Jul 2012 00:01:00 GMT]]></title><description><![CDATA[<p>Dieser Thread wurde von Moderator/in <a href="http://www.c-plusplus.net/forum/u1819" rel="nofollow">rüdiger</a> aus dem Forum <a href="http://www.c-plusplus.net/forum/f8" rel="nofollow">Rund um die Programmierung</a> in das Forum <a href="http://www.c-plusplus.net/forum/f15" rel="nofollow">C++ (auch C++0x und C++11)</a> verschoben.</p>
<p>Im Zweifelsfall bitte auch folgende Hinweise beachten:<br />
<a href="http://www.c-plusplus.net/forum/39405" rel="nofollow">C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?</a></p>
<p><em>Dieses Posting wurde automatisch erzeugt.</em></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2229087</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2229087</guid><dc:creator><![CDATA[C++ Forumbot]]></dc:creator><pubDate>Mon, 02 Jul 2012 00:01:00 GMT</pubDate></item><item><title><![CDATA[Reply to Struct von einer Funktion zurückgeben on Mon, 02 Jul 2012 14:13:09 GMT]]></title><description><![CDATA[<p>Unregistriert schrieb:</p>
<blockquote>
<p>ich habe hier mehrere Funktionen, die jeweils Daten in Form einer Struct zurückgeben.</p>
<pre><code class="language-cpp">Vector operator +(const Vector &amp;v1, const Vector &amp;v2) {
    return Vector(v1.x + v2.x, v1.y+v2.y, v1.z+v2.z);
}
</code></pre>
<p>Soweit ich weiß wird beim Zurückgeben aber eine Kopie meiner Struct zurückgegeben?</p>
</blockquote>
<p>Es wird ein Vector-Objekt zurück gegeben. Dieses Vector-Objekt wird typischerweise direkt erzeugt (RVO = return value optimization).</p>
<p>Unregistriert schrieb:</p>
<blockquote>
<p>Gibt es eine Möglichkeit das zu vermeiden?</p>
</blockquote>
<p>Da gibt es nicht viel zu vermeiden.</p>
<p>Unregistriert schrieb:</p>
<blockquote>
<p>Ist es sinnvoll, die Funktion als inline zu deklarieren, oder macht es keinen unterschied, wenn ich sie seperat in einer cpp-Datei implementiere?</p>
</blockquote>
<p>Das macht keinen Unterschied. RVO ist so oder so anwendbar.</p>
<p>Unregistriert schrieb:</p>
<blockquote>
<p>Oder wird das alles bereits vom Compiler optimiert?</p>
</blockquote>
<p>Ich wüsste jedenfalls nicht, was da in deinem Fall noch übrig bleiben sollte, wo du per &quot;Handanlegen&quot; noch etwas rausholen kannst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2229259</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2229259</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Mon, 02 Jul 2012 14:13:09 GMT</pubDate></item><item><title><![CDATA[Reply to Struct von einer Funktion zurückgeben on Mon, 02 Jul 2012 14:43:48 GMT]]></title><description><![CDATA[<p>Unregistriert schrieb:</p>
<blockquote>
<p>Ist es sinnvoll, die Funktion als inline zu deklarieren</p>
</blockquote>
<p>Ja, aber warum ist <code>Vector</code> kein Template?</p>
<p>Unregistriert schrieb:</p>
<blockquote>
<p>der macht es keinen unterschied, wenn ich sie seperat in einer cpp-Datei implementiere? Oder wird das alles bereits vom Compiler optimiert?</p>
</blockquote>
<p>Inlinen geht nur, wenn die Definition im Header steht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2229273</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2229273</guid><dc:creator><![CDATA[TyRoXx]]></dc:creator><pubDate>Mon, 02 Jul 2012 14:43:48 GMT</pubDate></item><item><title><![CDATA[Reply to Struct von einer Funktion zurückgeben on Mon, 02 Jul 2012 19:57:20 GMT]]></title><description><![CDATA[<p>Danke,</p>
<p>mir ging es hauptsächlich darum zu wissen, ob es einen Unterschied macht, wenn ich eine Funktion im Header als inline implementiere, oder seperat in der cpp, und in der .h nur den Header der Funktion habe. Das scheint ja keinen Unterschied zu machen, wenn ich es recht verstanden habe.</p>
<p>Der Vektor ist nur ein Beispiel gewesen, betrifft für mich auch andere Funktionen (wo auch mehr als nur 3 floats in der Struct stehen). Der Vektor ist bei mir kein Template, weil ich auch keinen großen Sinn darin sehe (zumindest für meinen Fall). Ich schreib keine riesengroße Library, die für hunderte verschiedener Programme verwendet wird, von daher macht es für mich keinen Unterschied, ob ich</p>
<pre><code>template &lt;typename T&gt; struct TVector { T x, y, z; };
typedef TVector&lt;float&gt; Vector;
</code></pre>
<p>oder direkt</p>
<pre><code>struct Vector { float x, y, z; };
</code></pre>
<p>schreibe. Letzteres ist für mich schlichtweg einfacher zu handhaben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2229462</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2229462</guid><dc:creator><![CDATA[Unregistriert]]></dc:creator><pubDate>Mon, 02 Jul 2012 19:57:20 GMT</pubDate></item></channel></rss>