<?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[const &amp;amp; oder lieber Pointer?]]></title><description><![CDATA[<p>Hallo <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>
<p>Ich hab zwei Fragen, die eine ist, welcher der folgenden Möglichkeite ich benutzen sollte:</p>
<pre><code class="language-cpp">void MachWas(const Typ&amp; object);
</code></pre>
<p>oder</p>
<pre><code class="language-cpp">void MachWas(Typ *ptrObject);
</code></pre>
<p>Ich habe gelesen, das bei ersterer Variante trotz der Referenz ziemlich oft kopiert wird?? Das wäre ungünstig, was meint ihr?</p>
<p>2.)<br />
Folgendes ist ja möglich:</p>
<pre><code class="language-cpp">MeinTyp object = { 0 };
</code></pre>
<p>Wenn nun object ein Klassenattribut ist, geht das nicht mehr:</p>
<pre><code class="language-cpp">// Im Konstruktor
object = { 0 };
</code></pre>
<p>Wie lautet die Syntax?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/192319/const-amp-oder-lieber-pointer</link><generator>RSS for Node</generator><lastBuildDate>Sun, 27 Sep 2026 09:47:33 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/192319.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 12 Sep 2007 21:03:07 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to const &amp;amp; oder lieber Pointer? on Wed, 12 Sep 2007 21:03:07 GMT]]></title><description><![CDATA[<p>Hallo <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>
<p>Ich hab zwei Fragen, die eine ist, welcher der folgenden Möglichkeite ich benutzen sollte:</p>
<pre><code class="language-cpp">void MachWas(const Typ&amp; object);
</code></pre>
<p>oder</p>
<pre><code class="language-cpp">void MachWas(Typ *ptrObject);
</code></pre>
<p>Ich habe gelesen, das bei ersterer Variante trotz der Referenz ziemlich oft kopiert wird?? Das wäre ungünstig, was meint ihr?</p>
<p>2.)<br />
Folgendes ist ja möglich:</p>
<pre><code class="language-cpp">MeinTyp object = { 0 };
</code></pre>
<p>Wenn nun object ein Klassenattribut ist, geht das nicht mehr:</p>
<pre><code class="language-cpp">// Im Konstruktor
object = { 0 };
</code></pre>
<p>Wie lautet die Syntax?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1364311</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1364311</guid><dc:creator><![CDATA[pazoA]]></dc:creator><pubDate>Wed, 12 Sep 2007 21:03:07 GMT</pubDate></item><item><title><![CDATA[Reply to const &amp;amp; oder lieber Pointer? on Wed, 12 Sep 2007 21:07:00 GMT]]></title><description><![CDATA[<p>pazoA schrieb:</p>
<blockquote>
<p>Ich habe gelesen, das bei ersterer Variante trotz der Referenz ziemlich oft kopiert wird?? Das wäre ungünstig, was meint ihr?</p>
</blockquote>
<p>Da hast du was falsches gelesen. Wenn die Übergabe eines NULL-Pointers keinen Sinn macht, nehme ich ausschließlich eine Referenz.</p>
<blockquote>
<p>Wie lautet die Syntax?</p>
</blockquote>
<p>Initialisierungen macht man im Konstruktor über die Initialisierungsliste, was du aber vorhast geht (noch) nicht!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1364312</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1364312</guid><dc:creator><![CDATA[rüdiger]]></dc:creator><pubDate>Wed, 12 Sep 2007 21:07:00 GMT</pubDate></item><item><title><![CDATA[Reply to const &amp;amp; oder lieber Pointer? on Wed, 12 Sep 2007 21:09:38 GMT]]></title><description><![CDATA[<p>pazoA schrieb:</p>
<blockquote>
<p>Ich habe gelesen, das bei ersterer Variante trotz der Referenz ziemlich oft kopiert wird?? Das wäre ungünstig, was meint ihr?</p>
</blockquote>
<p>Verbrenn' die Quelle. Wann immer möglich (außer für die Builtin-Datentypen (short, int, long, unsigned, double, float, void*) solltest du als konstante Referenz übergeben.</p>
<p>pazoA schrieb:</p>
<blockquote>
<p>Folgendes ist ja möglich:</p>
<pre><code class="language-cpp">MeinTyp object = { 0 };
</code></pre>
</blockquote>
<p>Nein, nur wenn MeinTyp ein POD-Struct mit einem Member eines integralen oder Zeigertypen ist.</p>
<p>pazoA schrieb:</p>
<blockquote>
<p>Wenn nun object ein Klassenattribut ist, geht das nicht mehr:</p>
<pre><code class="language-cpp">// Im Konstruktor
object = { 0 };
</code></pre>
<p>Wie lautet die Syntax?</p>
</blockquote>
<p>Es gibt keine. Das Erste ist ein Konstruktor, das zweite ist eine Zuweisung. Das sind elementar verschiedene Dinge. Abgesehen davon solltest du sowieso einen anständigen Konstruktor definieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1364314</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1364314</guid><dc:creator><![CDATA[.filmor]]></dc:creator><pubDate>Wed, 12 Sep 2007 21:09:38 GMT</pubDate></item><item><title><![CDATA[Reply to const &amp;amp; oder lieber Pointer? on Thu, 13 Sep 2007 07:05:27 GMT]]></title><description><![CDATA[<p>pazoA schrieb:</p>
<blockquote>
<pre><code class="language-cpp">void MachWas(const Typ&amp; object);
</code></pre>
<p>oder</p>
<pre><code class="language-cpp">void MachWas(Typ *ptrObject);
</code></pre>
</blockquote>
<p>Die beiden Varianten haben kaum etwas miteinander zu tun. Man schaue einfach mal auf die &quot;const-Situation&quot;...</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1364415</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1364415</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Thu, 13 Sep 2007 07:05:27 GMT</pubDate></item><item><title><![CDATA[Reply to const &amp;amp; oder lieber Pointer? on Thu, 13 Sep 2007 21:28:54 GMT]]></title><description><![CDATA[<p>rüdiger schrieb:</p>
<blockquote>
<blockquote>
<p>Wie lautet die Syntax?</p>
</blockquote>
<p>Initialisierungen macht man im Konstruktor über die Initialisierungsliste, was du aber vorhast geht (noch) nicht!</p>
</blockquote>
<p>Du hast genau das getroffen was ich meinte <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="🙂"
    /><br />
Also muss ich jedes Attribut des Klassenattributs explizit mit 0 initialisieren? <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=":-/"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1364928</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1364928</guid><dc:creator><![CDATA[pazoA]]></dc:creator><pubDate>Thu, 13 Sep 2007 21:28:54 GMT</pubDate></item><item><title><![CDATA[Reply to const &amp;amp; oder lieber Pointer? on Thu, 13 Sep 2007 22:04:01 GMT]]></title><description><![CDATA[<p>Nope. Du verpasst der Klasse des Klassenattributs einfach auch einen ctor:</p>
<pre><code class="language-cpp">class A
{
public:
    A();
    A(int a, int b, int c)
      :  m_a(a),
         m_b(b),
         m_c(c)
    {
    }

    int m_a;
    int m_b;
    int m_c;
};

class B
{
public:
    B()
       :  m_a(0, 0, 0),
          m_i(0)
    {
        // geht auch so (vorausgesetzt A hat einen operator =, und der wird defaultmässig vom compiler erstellt wenn man es nicht irgendwie verhindert)
        m_a = A(1, 2, 3);
    }

private:
   A m_a;
   int m_i;
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1364938</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1364938</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Thu, 13 Sep 2007 22:04:01 GMT</pubDate></item><item><title><![CDATA[Reply to const &amp;amp; oder lieber Pointer? on Thu, 13 Sep 2007 22:40:34 GMT]]></title><description><![CDATA[<p>Die Benutzung eines eigenen ctors ist eine Möglichkeit, allerdings ist die betreffende Klasse dann kein Aggregat und schon gar kein POD-struct mehr. Zudem hat man diese Möglichkeit nicht, wenn man etwa fremde klassen aus irgendwelchen Bibliotheken benutzt. Man kann die Initialisierung auch mit einer benannten Funktion durchführen:</p>
<pre><code class="language-cpp">struct A
{
    int m_a;
    int m_b;
    int m_c;
};
inline A makeA(int a, int b, int c)
{
    A x = { a, b, c };
    return x;
}

class B
{
public:
    B()
       :  m_a(makeA(0, 0, 0)),
          m_i(0)
    {
          // oder
          m_a = makeA(1, 2, 3);
    }

private:
   A m_a;
   int m_i;
};
</code></pre>
<p>Ein Compiler, der überhaupt NRVO beherrscht, wird hier alle Kopien eliminieren.</p>
<p>Daraus kann man ein schönes Idiom machen:</p>
<pre><code class="language-cpp">template &lt;typename T, typename... Args&gt;
T make_aggregate(Args... args)
{
    T x = { args... };
    return x;
}
</code></pre>
<p>(wobei das bei C++0x möglicherweise gar nicht mehr nötig ist?)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1364946</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1364946</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Thu, 13 Sep 2007 22:40:34 GMT</pubDate></item></channel></rss>