<?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[c++ referencen pointer best practice]]></title><description><![CDATA[<p>Hi All</p>
<p>Ich frage mich schon lange was den das beste ist als funktion rückgabewert bei Klassenmethoden? -&gt; Pointer oder Referencen, dazu ein Beispiel:</p>
<pre><code class="language-cpp">class Test {

1:
const std::string&amp; getStr() { return str; }

2:
std::string&amp; getStr() { return str; }

3:
std::string* getStr() { return *str; }

private:
std:string m_str;

}
</code></pre>
<p>Welche der 3 funktionen ist am bestten oder was ist best practice?</p>
<p>Warum die Frage, ich bekoome bei unterem beispiel folgende Fehlermeldung:</p>
<p>passing `const hxItsCatInfString' as `this' argument of `const std::string&amp; hxItsCatInfString::GetITSParam()' discards qualifiers</p>
<pre><code class="language-cpp">class hxItsCatInfString  {

inline const std::string&amp; GetCompSub() const {
        return  m_StrCompSub;
    };
    void SetCompSub(const std::string&amp; str) {
        m_StrCompSub = str;
    };

private:
   std::string m_StrCompSub;
};

class  hxItsCatInfChild {

const hxItsCatInfString&amp; GetCatName() const {
        return  m_CatInfDef;
};

private:
hxItsCatInfString      m_CatInfDef;

};
</code></pre>
<p>Wenn ich nun folgendes mache gehts nicht mehr:</p>
<pre><code class="language-cpp">int main() {
hxItsCatInfChild test;
std::string paramId = test.GetCatName().GetITSParam();
}
</code></pre>
<p>Was daran ist schlecht oder wo würdet ihr mit pointers arbeiten und wo mit const ref und wo nur mit ref????</p>
<p>Vielen Dank</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/263170/c-referencen-pointer-best-practice</link><generator>RSS for Node</generator><lastBuildDate>Sun, 06 Sep 2026 00:24:09 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/263170.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 16 Mar 2010 18:43:56 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to c++ referencen pointer best practice on Tue, 16 Mar 2010 18:43:56 GMT]]></title><description><![CDATA[<p>Hi All</p>
<p>Ich frage mich schon lange was den das beste ist als funktion rückgabewert bei Klassenmethoden? -&gt; Pointer oder Referencen, dazu ein Beispiel:</p>
<pre><code class="language-cpp">class Test {

1:
const std::string&amp; getStr() { return str; }

2:
std::string&amp; getStr() { return str; }

3:
std::string* getStr() { return *str; }

private:
std:string m_str;

}
</code></pre>
<p>Welche der 3 funktionen ist am bestten oder was ist best practice?</p>
<p>Warum die Frage, ich bekoome bei unterem beispiel folgende Fehlermeldung:</p>
<p>passing `const hxItsCatInfString' as `this' argument of `const std::string&amp; hxItsCatInfString::GetITSParam()' discards qualifiers</p>
<pre><code class="language-cpp">class hxItsCatInfString  {

inline const std::string&amp; GetCompSub() const {
        return  m_StrCompSub;
    };
    void SetCompSub(const std::string&amp; str) {
        m_StrCompSub = str;
    };

private:
   std::string m_StrCompSub;
};

class  hxItsCatInfChild {

const hxItsCatInfString&amp; GetCatName() const {
        return  m_CatInfDef;
};

private:
hxItsCatInfString      m_CatInfDef;

};
</code></pre>
<p>Wenn ich nun folgendes mache gehts nicht mehr:</p>
<pre><code class="language-cpp">int main() {
hxItsCatInfChild test;
std::string paramId = test.GetCatName().GetITSParam();
}
</code></pre>
<p>Was daran ist schlecht oder wo würdet ihr mit pointers arbeiten und wo mit const ref und wo nur mit ref????</p>
<p>Vielen Dank</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1870016</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1870016</guid><dc:creator><![CDATA[saschaappel2]]></dc:creator><pubDate>Tue, 16 Mar 2010 18:43:56 GMT</pubDate></item><item><title><![CDATA[Reply to c++ referencen pointer best practice on Tue, 16 Mar 2010 18:48:57 GMT]]></title><description><![CDATA[<p>Und das entschiedende hast du nicht gepostet:<br />
Wie schaut</p>
<pre><code class="language-cpp">hxItsCatInfString::GetITSParam()
</code></pre>
<p>aus?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1870019</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1870019</guid><dc:creator><![CDATA[l&#x27;abra d&#x27;or]]></dc:creator><pubDate>Tue, 16 Mar 2010 18:48:57 GMT</pubDate></item><item><title><![CDATA[Reply to c++ referencen pointer best practice on Tue, 16 Mar 2010 19:05:48 GMT]]></title><description><![CDATA[<p>Der Fehler tritt auf, weil das Objekt <code>this</code> konstant ist, aber die Funktion <code>getItsParam</code> nicht, d. h. sie darf nur für nicht-konstante Instanzen aufgerufen werden.</p>
<p>Und zu deiner best practise:</p>
<pre><code class="language-cpp">4.
const std::string getStr() { return str; }
</code></pre>
<p>Denn was ist das für ein getter, über den man setten kann?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1870023</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1870023</guid><dc:creator><![CDATA[Michael E.]]></dc:creator><pubDate>Tue, 16 Mar 2010 19:05:48 GMT</pubDate></item><item><title><![CDATA[Reply to c++ referencen pointer best practice on Tue, 16 Mar 2010 19:48:14 GMT]]></title><description><![CDATA[<p>Michael E. schrieb:</p>
<blockquote>
<p>Und zu deiner best practise:</p>
<pre><code class="language-cpp">4.
const std::string getStr() { return str; }
</code></pre>
</blockquote>
<p>die begruendung wuerde mich aber echt mal interessieren</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1870045</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1870045</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Tue, 16 Mar 2010 19:48:14 GMT</pubDate></item><item><title><![CDATA[Reply to c++ referencen pointer best practice on Tue, 16 Mar 2010 19:59:46 GMT]]></title><description><![CDATA[<p>Wie schon gesagt: Die Funktion soll ein reiner Getter sein, also brauch ich auch keinen schreibenden Zugriff auf interne Daten. Störst du dich an dem Übergeben per value oder an dem const?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1870051</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1870051</guid><dc:creator><![CDATA[Michael E.]]></dc:creator><pubDate>Tue, 16 Mar 2010 19:59:46 GMT</pubDate></item><item><title><![CDATA[Reply to c++ referencen pointer best practice on Tue, 16 Mar 2010 20:00:04 GMT]]></title><description><![CDATA[<p>Michael E. schrieb:</p>
<blockquote>
<p>Wie schon gesagt: Wenn ich meinee Funktion ein reiner Getter sein soll, dann darf man den Klassenmember nicht verändern können. Störst du dich an dem Übergeben per value oder an dem const?</p>
</blockquote>
<p>Was spricht gegen ein string const&amp; ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1870052</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1870052</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Tue, 16 Mar 2010 20:00:04 GMT</pubDate></item><item><title><![CDATA[Reply to c++ referencen pointer best practice on Tue, 16 Mar 2010 20:27:50 GMT]]></title><description><![CDATA[<p>Ob per reference oder per value ist mir eigentlich fast egal. Für die Referenz würde der Geschwindigkeitsvorteil sprechen, wobei ich mich davon in letzter Zeit sehr wenig beeinflussen lasse, denn man wird es bei der Programmausführung höchstwahrscheinlich eh nicht merken. Für die Wertrückgabe spricht, dass man etwas besser die Schnittstelle der Klasse von der Implementierung trennt.</p>
<pre><code class="language-cpp">struct Foo
{
    vector&lt;int&gt; bar;

    const vector&lt;int&gt; getBar() { return bar; }
};
</code></pre>
<p>=&gt;</p>
<pre><code class="language-cpp">struct Foo
{
    list&lt;int&gt; bar;

    const vector&lt;int&gt; getBar() { vector&lt;int&gt; temp; copy(bar.begin(), bar.end(), back_inserter(temp); return temp; }
};
</code></pre>
<p>Wenn ich eine Referenz zurückgeben würde, müsste ich das Objekt weiterleben lassen.</p>
<p>Alles sehr schwache Argumente, deshalb wäre es mir fast egal. Was hast du denn gegen meine Variante?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1870065</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1870065</guid><dc:creator><![CDATA[Michael E.]]></dc:creator><pubDate>Tue, 16 Mar 2010 20:27:50 GMT</pubDate></item><item><title><![CDATA[Reply to c++ referencen pointer best practice on Wed, 17 Mar 2010 09:05:27 GMT]]></title><description><![CDATA[<p>Egal ob 1 oder 4, aber die Member-Funktion sollte auf jeden Fall als 'const' deklariert sein:</p>
<pre><code class="language-cpp">const std::string&amp; getStr() const { return str; }
// oder
std::string getStr() const { return str; } // &lt;- das const vor std::string ist aber total überflüssig (in Bezug auf Lösung4 von Michael E.)
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1870188</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1870188</guid><dc:creator><![CDATA[Th69]]></dc:creator><pubDate>Wed, 17 Mar 2010 09:05:27 GMT</pubDate></item><item><title><![CDATA[Reply to c++ referencen pointer best practice on Wed, 17 Mar 2010 13:37:56 GMT]]></title><description><![CDATA[<p>Michael E. schrieb:</p>
<blockquote>
<p>...Für die Wertrückgabe spricht, dass man etwas besser die Schnittstelle der Klasse von der Implementierung trennt....</p>
</blockquote>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /> <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="👍"
    /> <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="👍"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f60b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_savoring_food"
      title=":yum:"
      alt="😋"
    /><br />
Ich muss gestehen, dass ich das noch nie so begriffen habe -&gt; jetzt aber schon.</p>
<p>Man lernt eben nie aus.</p>
<p>Danke,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1870334</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1870334</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Wed, 17 Mar 2010 13:37:56 GMT</pubDate></item><item><title><![CDATA[Reply to c++ referencen pointer best practice on Wed, 17 Mar 2010 14:27:26 GMT]]></title><description><![CDATA[<p>Th69 schrieb:</p>
<blockquote>
<p>das const vor std::string ist aber total überflüssig (in Bezug auf Lösung4 von Michael E.)</p>
</blockquote>
<p>Nein, denn durch das const wird getStr() ein reiner rvalue.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1870375</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1870375</guid><dc:creator><![CDATA[Michael E.]]></dc:creator><pubDate>Wed, 17 Mar 2010 14:27:26 GMT</pubDate></item><item><title><![CDATA[Reply to c++ referencen pointer best practice on Wed, 17 Mar 2010 17:31:59 GMT]]></title><description><![CDATA[<p>Michael E. schrieb:</p>
<blockquote>
<p>Nein, denn durch das const wird getStr() ein reiner rvalue.</p>
</blockquote>
<p>Der RValue wird nicht &quot;reiner&quot; dadurch, er ist nur <code>const</code> -qualifiziert. Das ist ein wichtiger Unterschied.</p>
<p>Ich verweise auch gerne wieder auf eine etwas ältere <a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-35603-and-start-is-10.html" rel="nofollow">Diskussion</a> (etwas scrollen).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1870502</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1870502</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Wed, 17 Mar 2010 17:31:59 GMT</pubDate></item><item><title><![CDATA[Reply to c++ referencen pointer best practice on Wed, 17 Mar 2010 17:57:21 GMT]]></title><description><![CDATA[<p>Da hast du Recht, &quot;reiner rvalue&quot; war definitiv der falsche Ausdruck dafür.</p>
<p>Aber gemeint habe ich schon das Richtige <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/1870513</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1870513</guid><dc:creator><![CDATA[Michael E.]]></dc:creator><pubDate>Wed, 17 Mar 2010 17:57:21 GMT</pubDate></item></channel></rss>