<?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[Konstantes Objekt als Attribut]]></title><description><![CDATA[<p>huhu ihrs,<br />
hab mal wieder eine Frage:</p>
<p>Wieso muss man die operator= Funktion explizit implementieren,<br />
wenn man ein konstantes Objekt als nicht-statisches Attribut hat?</p>
<p>Ich mein... wo ist hier die Logik ?<br />
Bei einem konstanten Objekt ... da gibt es sowieso nichts zu kopieren^^</p>
<p>Und vor allem, wieso muss man den Copy Konstruktor dann nicht auch selber machen ?</p>
<p>danke schonmal für Antworten <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/topic/258003/konstantes-objekt-als-attribut</link><generator>RSS for Node</generator><lastBuildDate>Wed, 09 Sep 2026 15:52:20 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/258003.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 05 Jan 2010 16:30:56 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Konstantes Objekt als Attribut on Tue, 05 Jan 2010 16:30:56 GMT]]></title><description><![CDATA[<p>huhu ihrs,<br />
hab mal wieder eine Frage:</p>
<p>Wieso muss man die operator= Funktion explizit implementieren,<br />
wenn man ein konstantes Objekt als nicht-statisches Attribut hat?</p>
<p>Ich mein... wo ist hier die Logik ?<br />
Bei einem konstanten Objekt ... da gibt es sowieso nichts zu kopieren^^</p>
<p>Und vor allem, wieso muss man den Copy Konstruktor dann nicht auch selber machen ?</p>
<p>danke schonmal für Antworten <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/1833086</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1833086</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Tue, 05 Jan 2010 16:30:56 GMT</pubDate></item><item><title><![CDATA[Reply to Konstantes Objekt als Attribut on Tue, 05 Jan 2010 17:28:19 GMT]]></title><description><![CDATA[<p>edit: Oh, ich glaube ich habe dich falsch verstanden.</p>
<p>edit2: Jetzt die richtige Erklärung:</p>
<p>Angenommen du hast das:</p>
<pre><code class="language-cpp">struct A{
	const int a;
	A(int b):a(b){}
};

int main()
{
  A n(5);
  A m(6);
  m=n;
}
</code></pre>
<p>Welchen Wert soll m.a denn hinterher haben? 6? Dann habe ich bei der Zuweisung ja nichts verändert. 5? Dann habe ich eine konstante Variable geändert. Beide Möglichkeiten passen nicht richtig, deshalb kann der Compiler diese Entscheidung nicht übernehmen und fragt den Programmierer.</p>
<p>Hat man hingegen dies:</p>
<pre><code class="language-cpp">int main()
{
  A n(5);
  A m(n);
}
</code></pre>
<p>Dann ist ganz klar, dass m.n hinterher 5 sein soll und der Compiler kann den Defaultkonstruktor nehmen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1833119</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1833119</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Tue, 05 Jan 2010 17:28:19 GMT</pubDate></item><item><title><![CDATA[Reply to Konstantes Objekt als Attribut on Tue, 05 Jan 2010 17:28:42 GMT]]></title><description><![CDATA[<p>Dweb schrieb:</p>
<blockquote>
<p>Wieso muss man die operator= Funktion explizit implementieren,<br />
wenn man ein konstantes Objekt als nicht-statisches Attribut hat?</p>
</blockquote>
<p>Weil der default-generierte Zuweisungsoperator memberweise kopiert und konstanten Objekten per Definition nichts zugewiesen werden kann.</p>
<p>Wenn du den Zuweisungsoperator selbst implementieren musst (womöglich mittels üblen Hacks), nur um das Verhalten des compilergenerierten bei <code>const</code> -Membern nachzubilden, solltest du dir überlegen, ob das <code>const</code> wirklich sinnvoll ist.</p>
<p>Dweb schrieb:</p>
<blockquote>
<p>Ich mein... wo ist hier die Logik ?<br />
Bei einem konstanten Objekt ... da gibt es sowieso nichts zu kopieren^^</p>
</blockquote>
<p>Wieso sollte ein konstantes Objekt nicht <strong>kopier</strong>bar (durch den Kopierkonstruktor) sein? Um eine Kopie zu erstellen, muss das Original im Normalfall nicht verändert werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1833126</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1833126</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Tue, 05 Jan 2010 17:28:42 GMT</pubDate></item><item><title><![CDATA[Reply to Konstantes Objekt als Attribut on Tue, 05 Jan 2010 17:40:56 GMT]]></title><description><![CDATA[<p>Also SeppJ,</p>
<p>wenn ich dich dein Beispiel nun richtig verstanden habe,<br />
dann soll der Compiler ja einerseits eine Zuweisung durchführen (m=n),<br />
andererseits darf er das aber nicht, da das Attribut (a) konstant ist.</p>
<p>Und aufgrund dieses Konfliktes muss dies der Programmiere handhaben.<br />
richtig so ?^^</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1833140</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1833140</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Tue, 05 Jan 2010 17:40:56 GMT</pubDate></item><item><title><![CDATA[Reply to Konstantes Objekt als Attribut on Tue, 05 Jan 2010 17:48:40 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Wieso sollte ein konstantes Objekt nicht <strong>kopier</strong>bar (durch den Kopierkonstruktor) sein? Um eine Kopie zu erstellen, muss das Original im Normalfall nicht verändert werden.</p>
</blockquote>
<p>Oh sry, ich habe mich mit dieser Aussage nur auf den operator= bezogen,<br />
und mit kopieren meinte ich diesem Fall zuweisen.<br />
mein Fehler <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1833148</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1833148</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Tue, 05 Jan 2010 17:48:40 GMT</pubDate></item><item><title><![CDATA[Reply to Konstantes Objekt als Attribut on Tue, 05 Jan 2010 17:55:06 GMT]]></title><description><![CDATA[<p>Dweb schrieb:</p>
<blockquote>
<p>Und aufgrund dieses Konfliktes muss dies der Programmiere handhaben.<br />
richtig so ?^^</p>
</blockquote>
<p>Der Normalfall bei Objekten mit konstanten Membern ist wie angetönt eher, dass keine Zuweisungs-Semantik implementiert wird. Falls diese trotzdem erwünscht ist, sollte man meiner Meinung nach die Member veränderlich machen.</p>
<p>Oder sag mir, wie du den Zuweisungsoperator straightforward implementieren würdest (ohne Const-Wegcasten, Placement New oder solche Sachen). <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1833155</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1833155</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Tue, 05 Jan 2010 17:55:06 GMT</pubDate></item><item><title><![CDATA[Reply to Konstantes Objekt als Attribut on Tue, 05 Jan 2010 18:02:42 GMT]]></title><description><![CDATA[<p>naja, angenomman ich habe Attriubte die nicht konstant sind und welche die konstant sind... dann würde eine Zuweisung ja theoretisch Sinn machen.</p>
<p>Und in der operator= Funktion brauche ich die die const-Attriubte ja nich beachten.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/12954">@nexus</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1833159</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1833159</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Tue, 05 Jan 2010 18:02:42 GMT</pubDate></item><item><title><![CDATA[Reply to Konstantes Objekt als Attribut on Tue, 05 Jan 2010 18:12:21 GMT]]></title><description><![CDATA[<p>Aber wieso sollte man nur einen Teil des Objekts zuweisen? Das führt lediglich zu inkonsistenen Objektstati.</p>
<p>Grundsätzlich sollte man beim Design eigener Klassen gewisse Konventionen einhalten. Dazu gehört zum Beispiel, dass zwei Objekte nach einer Kopie oder Zuweisung gleich sind (dadurch zeichnet sich ja ein Kopiervorgang aus).</p>
<p>Klar, es gibt auch berechtigte Ausnahmen (z.B. Move-Semantik wie bei <code>std::auto_ptr</code> ), aber die bringen genau aus dem Grund, dass sie nicht die intuitiven Erwartungen erfüllen, eine Menge Einschränkungen mit sich (z.B. bezüglich Speicherung in STL-Containern).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1833173</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1833173</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Tue, 05 Jan 2010 18:12:21 GMT</pubDate></item><item><title><![CDATA[Reply to Konstantes Objekt als Attribut on Tue, 05 Jan 2010 18:26:42 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Aber wieso sollte man nur einen Teil des Objekts zuweisen? Das führt lediglich zu inkonsistenen Objektstati.</p>
</blockquote>
<p>da hast du recht, das stimmt nat.</p>
<p>gut nun habe ich wieder was gelernt.<br />
danke euch <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/1833185</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1833185</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Tue, 05 Jan 2010 18:26:42 GMT</pubDate></item></channel></rss>