<?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[Referenzen auf private data members]]></title><description><![CDATA[<p>Ich bin auf sowas gestoßen:</p>
<pre><code class="language-cpp">void machwas(int &amp; a){a=5;}

class klasse{
private:
  int i;
public:
  int &amp; operator()(){return i;}
};

int main(){
  klasse k;
  machwas(k());  // setzt k.i auf 5
}
</code></pre>
<p>Irgendwie sehe ich den Sinn davon nicht. Wenn man eine Referenz zurückgibt, könnte man schließlich gleich i public machen, da man nicht mehr kontrollieren kann, was mit i geschieht. Übersehe ich da was?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/240566/referenzen-auf-private-data-members</link><generator>RSS for Node</generator><lastBuildDate>Mon, 21 Sep 2026 23:08:38 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/240566.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 08 May 2009 09:01:13 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Referenzen auf private data members on Fri, 08 May 2009 09:01:13 GMT]]></title><description><![CDATA[<p>Ich bin auf sowas gestoßen:</p>
<pre><code class="language-cpp">void machwas(int &amp; a){a=5;}

class klasse{
private:
  int i;
public:
  int &amp; operator()(){return i;}
};

int main(){
  klasse k;
  machwas(k());  // setzt k.i auf 5
}
</code></pre>
<p>Irgendwie sehe ich den Sinn davon nicht. Wenn man eine Referenz zurückgibt, könnte man schließlich gleich i public machen, da man nicht mehr kontrollieren kann, was mit i geschieht. Übersehe ich da was?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1707584</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1707584</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Fri, 08 May 2009 09:01:13 GMT</pubDate></item><item><title><![CDATA[Reply to Referenzen auf private data members on Fri, 08 May 2009 11:52:35 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>ich sehe das genauso wie Du.<br />
Natürlich kann man über so eine &quot;get-Referenz-Funktion&quot; noch sowas wie Reference-Counting machen (und immerhin sind Referenzen nicht so leicht kopierbar wie Zeiger), aber mir fällt jetzt kein Szenario ein, bei dem das o.g. Konstrukt wirkliche Vorteile hätte.</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1707721</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1707721</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Fri, 08 May 2009 11:52:35 GMT</pubDate></item><item><title><![CDATA[Reply to Referenzen auf private data members on Fri, 08 May 2009 11:56:50 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>...Wenn man eine Referenz zurückgibt, könnte man schließlich gleich i public machen, da man nicht mehr kontrollieren kann, was mit i geschieht. Übersehe ich da was?</p>
</blockquote>
<p>Ohne konkreten Code würde ich dir recht geben. Es könnte vielleicht Ausnahmefälle geben (um Beispielsweise einen Operator [][] zu simulieren...), dies sollte aber wie gesagt die Ausnahme, nicht die Regel sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1707722</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1707722</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Fri, 08 May 2009 11:56:50 GMT</pubDate></item><item><title><![CDATA[Reply to Referenzen auf private data members on Fri, 08 May 2009 12:01:03 GMT]]></title><description><![CDATA[<p>Simon2 schrieb:</p>
<blockquote>
<p>..., aber mir fällt jetzt kein Szenario ein, bei dem das o.g. Konstrukt wirkliche Vorteile hätte.</p>
</blockquote>
<pre><code class="language-cpp">std::string str(&quot;jello&quot;);
str[0] = 'h';
</code></pre>
<p>Gut, das ist nicht ganz das Gleiche. Aber SeppJ hat die Sache so aus dem Kontext genommen, da ist es schwer zu sagen, ob es sinnvoll ist oder nicht.</p>
<p>Grundsätzlich sind zwei Dinge zu sagen:<br />
1. Getter und Setter sind immer besser als public Attribute, auch wenn die Getter mal eine Referenz zurückgeben. So kann man immerhin prüfen, wo und wann ein Zugriff darauf erfolgt. Eine Rückgabe einer Referenz ist oft nicht so optimal, kann aber sinnvolle Zwecke habe.<br />
2. Der Missbrauch einer Schnittstelle zu verhindern ist zwecklos, das kann man nicht schaffen und darauf sollte man auch nicht hinarbeiten. Ich nehme mal das Beispiel des <code>std::string</code> .</p>
<pre><code class="language-cpp">std::string str(&quot;jello&quot;);
char&amp; c = str[0];
str.append(&quot; world!&quot;);
c = 'h';
</code></pre>
<p>Der Kompilier schluckt dies, aber das Verhalten ist undefiniert. Man könnte sowas tatsächlich verhindern, nur ist es unnötig kompliziert.</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1707726</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1707726</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Fri, 08 May 2009 12:01:03 GMT</pubDate></item><item><title><![CDATA[Reply to Referenzen auf private data members on Fri, 08 May 2009 14:09:48 GMT]]></title><description><![CDATA[<p>Der gesamte Kontext wäre wohl etwas zu unübersichtlich. Die Klasse dient hauptsächlich als ein Wrapper für einen double-Wert mit ein paar Extras. Ich <em>vermute</em> der obige ()-Operator dient hier vor allem der Bequemlichkeit. Auf diese Weise ist der Zugriff auf das interessante Element immer schön knapp und übersichtlich.</p>
<p>Zumindest ist es keine von den hier vorgeschlagenen Möglichkeiten, daher meine Vermutung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1707809</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1707809</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Fri, 08 May 2009 14:09:48 GMT</pubDate></item></channel></rss>