<?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[Warnung bei Adresse auf Fkt.rückgabewert]]></title><description><![CDATA[<p>Hallo,</p>
<p>bekomme im Visual Studio 2008 eine Warnung bei diesem Codestück:</p>
<pre><code class="language-cpp">a.Setze( &amp;(b-&gt;GibC( )) );
</code></pre>
<p><strong>warning C4238: Nicht dem Standard entsprechende Erweiterung: R-Wert einer Klasse als L-Wert verwendet</strong></p>
<p>Kann ich diese Warnung ignorieren? Bei SetzeDelta übergebe ich die Adresse, in a.Setze() wird sofort eine Kopie (mit new) des Rückgabewerts gemacht. Es wird also nach der Zeile nie wieder auf den Rückgabewert zugegriffen.</p>
<p>Sollte also unkritisch sein in dem Fall?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/307100/warnung-bei-adresse-auf-fkt-rückgabewert</link><generator>RSS for Node</generator><lastBuildDate>Fri, 07 Aug 2026 01:34:34 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/307100.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 16 Aug 2012 14:33:44 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Warnung bei Adresse auf Fkt.rückgabewert on Thu, 16 Aug 2012 14:33:44 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>bekomme im Visual Studio 2008 eine Warnung bei diesem Codestück:</p>
<pre><code class="language-cpp">a.Setze( &amp;(b-&gt;GibC( )) );
</code></pre>
<p><strong>warning C4238: Nicht dem Standard entsprechende Erweiterung: R-Wert einer Klasse als L-Wert verwendet</strong></p>
<p>Kann ich diese Warnung ignorieren? Bei SetzeDelta übergebe ich die Adresse, in a.Setze() wird sofort eine Kopie (mit new) des Rückgabewerts gemacht. Es wird also nach der Zeile nie wieder auf den Rückgabewert zugegriffen.</p>
<p>Sollte also unkritisch sein in dem Fall?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2242524</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2242524</guid><dc:creator><![CDATA[dasdasdasda]]></dc:creator><pubDate>Thu, 16 Aug 2012 14:33:44 GMT</pubDate></item><item><title><![CDATA[Reply to Warnung bei Adresse auf Fkt.rückgabewert on Thu, 16 Aug 2012 14:45:47 GMT]]></title><description><![CDATA[<p>dasdasdasda schrieb:</p>
<blockquote>
<p>bekomme im Visual Studio 2008 eine Warnung bei diesem Codestück:</p>
<pre><code class="language-cpp">a.Setze( &amp;(b-&gt;GibC( )) );
</code></pre>
<p><strong>warning C4238: Nicht dem Standard entsprechende Erweiterung: R-Wert einer Klasse als L-Wert verwendet</strong></p>
<p>Kann ich diese Warnung ignorieren? Bei SetzeDelta übergebe ich die Adresse, in a.Setze() wird sofort eine Kopie (mit new) des Rückgabewerts gemacht. Es wird also nach der Zeile nie wieder auf den Rückgabewert zugegriffen.</p>
<p>Sollte also unkritisch sein in dem Fall?</p>
</blockquote>
<p>Mach den Parameter doch einfach const-qualifiziert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2242529</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2242529</guid><dc:creator><![CDATA[out]]></dc:creator><pubDate>Thu, 16 Aug 2012 14:45:47 GMT</pubDate></item><item><title><![CDATA[Reply to Warnung bei Adresse auf Fkt.rückgabewert on Thu, 16 Aug 2012 14:52:15 GMT]]></title><description><![CDATA[<p>dasdasdasda schrieb:</p>
<blockquote>
<p>bekomme im Visual Studio 2008 eine Warnung bei diesem Codestück:</p>
<pre><code class="language-cpp">a.Setze( &amp;(b-&gt;GibC( )) );
</code></pre>
<p><strong>warning C4238: Nicht dem Standard entsprechende Erweiterung: R-Wert einer Klasse als L-Wert verwendet</strong></p>
<p>Kann ich diese Warnung ignorieren?</p>
</blockquote>
<p>Du kannst auch von der Brücke springen, schätze ich. Solltest du diese Warnung ignorieren? Nein.</p>
<p>dasdasdasda schrieb:</p>
<blockquote>
<p>[...] in a.Setze() wird sofort eine Kopie (mit new) des Rückgabewerts gemacht.<br />
Es wird also nach der Zeile nie wieder auf den Rückgabewert zugegriffen.</p>
</blockquote>
<p>Dann nimm den Parameter doch per Referenz-auf-Const, so wie es fast jeder andere auch tun würde. Das ist dann portabel und kommt entsprechend ohne Warnung aus.</p>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_down"
      title=":-1:"
      alt="👎"
    /></p>
<pre><code class="language-cpp">struct irgendwas {};

void setze(irgendwas* ptr)
{
  irgendwas kopie = *ptr;
}

irgendwas quelle()
{
  irgendwas i;
  return i;
}

int main()
{
  setze(&amp;quelle());
}
</code></pre>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/27a1.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--right_arrow"
      title=":arrow_right:"
      alt="➡"
    /></p>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
<pre><code class="language-cpp">struct irgendwas {};

void setze(irgendwas const&amp; ref)
{
  irgendwas kopie = ref;
}

irgendwas quelle()
{
  irgendwas i;
  return i;
}

int main()
{
  setze(quelle());
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2242530</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2242530</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Thu, 16 Aug 2012 14:52:15 GMT</pubDate></item><item><title><![CDATA[Reply to Warnung bei Adresse auf Fkt.rückgabewert on Thu, 16 Aug 2012 15:14:19 GMT]]></title><description><![CDATA[<p>Ich brauch also einen L-Wert um mir davon die Adresse geben zu lassen.<br />
Also rein mit dem Fkt.wert in eine temp. Var und davon dann die Adresse genommen. So funktionierts jetzt ohne Warnung.</p>
<p>Bei der Zeiger Lösung muss ich bleiben, weil ich die Variable auch auf &quot;ungültig&quot; setzen möchte.<br />
Gibts dafür eine Lösung ohne Zeiger?</p>
<p>class xy<br />
{<br />
...<br />
var* x;//diese var muss nicht unbedingt gesetzt sein<br />
...<br />
};</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2242538</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2242538</guid><dc:creator><![CDATA[dfghdfghd]]></dc:creator><pubDate>Thu, 16 Aug 2012 15:14:19 GMT</pubDate></item><item><title><![CDATA[Reply to Warnung bei Adresse auf Fkt.rückgabewert on Thu, 16 Aug 2012 15:22:49 GMT]]></title><description><![CDATA[<p>Du kannst die Funktion mit einer Referenzvariante überladen. Aber: Kann's sein, dass dein <code>b-&gt;GibC( )</code> vielleicht eher selber einen Zeiger zurück geben soll? Irgendwie ist es nämlich komisch, eine Funktion die Zeiger erwartet mit Zeigern auf Funktionsrückgabewerten füttern zu wollen. Da ist designtechnisch irgendwie etwas falsch, wie die Komponenten ineinander greifen sollen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2242540</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2242540</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Thu, 16 Aug 2012 15:22:49 GMT</pubDate></item><item><title><![CDATA[Reply to Warnung bei Adresse auf Fkt.rückgabewert on Thu, 16 Aug 2012 15:27:14 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>Du kannst die Funktion mit einer Referenzvariante überladen. Aber: Kann's sein, dass dein <code>b-&gt;GibC( )</code> vielleicht eher selber einen Zeiger zurück geben soll? Irgendwie ist es nämlich komisch, eine Funktion die Zeiger erwartet mit Zeigern auf Funktionsrückgabewerten füttern zu wollen. Da ist designtechnisch irgendwie etwas falsch, wie die Komponenten ineinander greifen sollen.</p>
</blockquote>
<p>ok danke.<br />
hab jetzt die übergabe der var als const reference gemacht, intern muss ich halt trotzdem mit Zeigern weiterarbeiten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2242541</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2242541</guid><dc:creator><![CDATA[dfvbgdfgd]]></dc:creator><pubDate>Thu, 16 Aug 2012 15:27:14 GMT</pubDate></item><item><title><![CDATA[Reply to Warnung bei Adresse auf Fkt.rückgabewert on Thu, 16 Aug 2012 15:33:21 GMT]]></title><description><![CDATA[<p>dfvbgdfgd schrieb:</p>
<blockquote>
<p>ok danke.<br />
hab jetzt die übergabe der var als const reference gemacht, intern muss ich halt trotzdem mit Zeigern weiterarbeiten.</p>
</blockquote>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /> Erläutere das mal. Deine Implementierungsdetails sollten nämlich keinerlei Einfluss auf die Schnittstelle haben. Wenn du nun sagst, dass du einfach so die Schnittstelle ändern kannst, dann war sie vorher falsch und du brauchtest gar keine Pointer. Versuchst du etwa Funktionsparameter als lokale Variablen wiederzuverwenden?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2242543</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2242543</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Thu, 16 Aug 2012 15:33:21 GMT</pubDate></item><item><title><![CDATA[Reply to Warnung bei Adresse auf Fkt.rückgabewert on Thu, 16 Aug 2012 15:53:47 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>dfvbgdfgd schrieb:</p>
<blockquote>
<p>ok danke.<br />
hab jetzt die übergabe der var als const reference gemacht, intern muss ich halt trotzdem mit Zeigern weiterarbeiten.</p>
</blockquote>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /> Erläutere das mal. Deine Implementierungsdetails sollten nämlich keinerlei Einfluss auf die Schnittstelle haben. Wenn du nun sagst, dass du einfach so die Schnittstelle ändern kannst, dann war sie vorher falsch und du brauchtest gar keine Pointer. Versuchst du etwa Funktionsparameter als lokale Variablen wiederzuverwenden?</p>
</blockquote>
<p>Hallo, danke für dein Interesse.<br />
Konkret gehts um folgendes:<br />
ich hab da eine wrapper klasse, die verschiedene realisierungen kapselt:</p>
<p>class wrapper1<br />
{<br />
realisierung1_t* r1;<br />
realisierung2_t* r2;<br />
realisierung3_t* r3;<br />
};</p>
<p>Nun kann es sein dass mal die eine, mal die andere, mal 2 Realisierungen gleichzeitig vorhanden sind.</p>
<p>Jede Realisierung wiederum kann verschiedene andere Realisierungen zurück geben, welche dann wiederum von Wrapper2 gekapselt werden müssen. Also sowas in der Art wrapper2_objekt.setze(r1-&gt;GibRealiserung4()), welches mir Realisierung4_t zurückgibt.<br />
Genau an der Stelle muss ich aber intern in wrapper2 wieder einen Zeiger Realisierung4* speichern.</p>
<p>class wrapper2<br />
{<br />
Realisierung4_t* r4;<br />
Realisierung5_t* r5;<br />
Realisierung6_t* r6;<br />
};</p>
<p>Komplett das Design umwerfen geht nicht, ich muss einfach eine Schicht um die bestehenden Realiserungen legen, um eine gewisse neue Logik einzubauen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2242547</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2242547</guid><dc:creator><![CDATA[sdfsfsdfsdf]]></dc:creator><pubDate>Thu, 16 Aug 2012 15:53:47 GMT</pubDate></item><item><title><![CDATA[Reply to Warnung bei Adresse auf Fkt.rückgabewert on Thu, 16 Aug 2012 16:49:22 GMT]]></title><description><![CDATA[<p>Wenn GibRealiserung4() ein Objekt &quot;by value&quot; zurückgibt, dann wird dieses Objekt - vereinfacht gesagt - mit dem nächsten Strichpunkt zerstört.</p>
<p>Einen Zeiger darauf zu speichern ist also ein Fehler, das Objekt existiert ja schon lange nicht mehr wenn der Zeiger dann verwendet wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2242561</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2242561</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Thu, 16 Aug 2012 16:49:22 GMT</pubDate></item><item><title><![CDATA[Reply to Warnung bei Adresse auf Fkt.rückgabewert on Thu, 16 Aug 2012 18:49:56 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>Wenn GibRealiserung4() ein Objekt &quot;by value&quot; zurückgibt, dann wird dieses Objekt - vereinfacht gesagt - mit dem nächsten Strichpunkt zerstört.</p>
<p>Einen Zeiger darauf zu speichern ist also ein Fehler, das Objekt existiert ja schon lange nicht mehr wenn der Zeiger dann verwendet wird.</p>
</blockquote>
<p>ich leg mir ja sofort eine kopie des objekts am heap an - noch bevor der strichpkt erreicht wurde - sofern der zeigerwert!=0.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2242612</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2242612</guid><dc:creator><![CDATA[fdgfdgdfgd]]></dc:creator><pubDate>Thu, 16 Aug 2012 18:49:56 GMT</pubDate></item><item><title><![CDATA[Reply to Warnung bei Adresse auf Fkt.rückgabewert on Thu, 16 Aug 2012 20:38:12 GMT]]></title><description><![CDATA[<p>Aha.<br />
Zeig mal Code.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2242650</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2242650</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Thu, 16 Aug 2012 20:38:12 GMT</pubDate></item></channel></rss>