<?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[Getter]]></title><description><![CDATA[<p>hey</p>
<p>ich habe eine frage wieso schreibt man:</p>
<pre><code class="language-cpp">class x
{
public:
size_t GetLength ( ) const { return length } ;
private:
size_t length ;
};
</code></pre>
<p>und nicht:</p>
<pre><code class="language-cpp">class x
{
public:
const size_t GetLength ( ) { return length } ;
private:
size_t length ;
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/258382/getter</link><generator>RSS for Node</generator><lastBuildDate>Wed, 09 Sep 2026 04:57:03 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/258382.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 10 Jan 2010 00:03:40 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Getter on Sun, 10 Jan 2010 00:03:40 GMT]]></title><description><![CDATA[<p>hey</p>
<p>ich habe eine frage wieso schreibt man:</p>
<pre><code class="language-cpp">class x
{
public:
size_t GetLength ( ) const { return length } ;
private:
size_t length ;
};
</code></pre>
<p>und nicht:</p>
<pre><code class="language-cpp">class x
{
public:
const size_t GetLength ( ) { return length } ;
private:
size_t length ;
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1836010</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1836010</guid><dc:creator><![CDATA[55544]]></dc:creator><pubDate>Sun, 10 Jan 2010 00:03:40 GMT</pubDate></item><item><title><![CDATA[Reply to Getter on Sun, 10 Jan 2010 00:14:15 GMT]]></title><description><![CDATA[<p>Das const sagt, dass die Methode const ist, also das Objekt nicht verändert und daher z.B. auch für eine konstante Instanz aufgerufen werden kann.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1836012</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1836012</guid><dc:creator><![CDATA[wx++]]></dc:creator><pubDate>Sun, 10 Jan 2010 00:14:15 GMT</pubDate></item><item><title><![CDATA[Reply to Getter on Sun, 10 Jan 2010 10:27:55 GMT]]></title><description><![CDATA[<p>Damit das funktioniert</p>
<pre><code class="language-cpp">void f(const x&amp; X)
{
    size_t l = X.GetLength();
}
</code></pre>
<p><a href="http://www.gotw.ca/gotw/006.htm" rel="nofollow">Const-Correctness</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1836113</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1836113</guid><dc:creator><![CDATA[brotbernd]]></dc:creator><pubDate>Sun, 10 Jan 2010 10:27:55 GMT</pubDate></item><item><title><![CDATA[Reply to Getter on Sun, 10 Jan 2010 13:45:09 GMT]]></title><description><![CDATA[<p>mit folgendem code:</p>
<pre><code class="language-cpp">size_t GetLength ( ) const { return length }
</code></pre>
<p>ist die methode konstant.<br />
konstante methoden können keine member inerhalb der klasse verändern und nur ebenfalls konstante methoden aufrufen.</p>
<p>hierbei würde der compiler z.b. zwei fehler melden:</p>
<pre><code class="language-cpp">class x
{
private:
int _a;
void foo() { };
void bar() const { };

public:
void something ( ) const 
{
  _a = 5; //fehler, something darf keine membervariable verändern

  this-&gt;foo(); //fehler, foo ist keine konstante methode und
               //kann daher nicht von something aufgerufen werden.

  this-&gt;bar(); //ok, bar ist ebenfalls eine konstante methode und kann von 
               //something aufgerufen werden.
}
};
</code></pre>
<p>im anderen fall den du gepostet hast:</p>
<pre><code class="language-cpp">const size_t GetLength ( ) { return length } ;
</code></pre>
<p>wird eine methode deklariert, welche eine konstante variable vom typen size_t zurück gibt.<br />
also nicht die methode ist konstant sondern der rückgabetyp.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1836249</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1836249</guid><dc:creator><![CDATA[Revo]]></dc:creator><pubDate>Sun, 10 Jan 2010 13:45:09 GMT</pubDate></item><item><title><![CDATA[Reply to Getter on Mon, 11 Jan 2010 10:01:32 GMT]]></title><description><![CDATA[<p>Wobei noch erwähnt werden muß, daß das &quot;const&quot; als Rückgabetyp überflüssig ist (solange es sich nicht um eine Referenz handelt):</p>
<pre><code class="language-cpp">size_t GetLength ( ) const { return length; }

// bzw.

const size_t&amp; GetLength ( ) const { return length; }
</code></pre>
<p>(P.S: Das Semikolon muß innerhalb der geschweiften Klammern!)</p>
<p>Da im ersten Fall sowieso der Wert kopiert wird, ist dieser ja automatisch konstant (d.h. kann nicht verändert werden).<br />
Nur bei einer Referenz ist es wichtig, ob man das &quot;const&quot; hinzufügt oder nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1836675</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1836675</guid><dc:creator><![CDATA[Th69]]></dc:creator><pubDate>Mon, 11 Jan 2010 10:01:32 GMT</pubDate></item><item><title><![CDATA[Reply to Getter on Mon, 11 Jan 2010 16:45:23 GMT]]></title><description><![CDATA[<p>Es gibt aber durchaus eine Daseinsberechtigung für konstante Rückgabetypen.</p>
<pre><code class="language-cpp">class x
{
public:
	operator bool() 
	{
		return v != 0;
	}
	void operator+=(x &amp; other)
	{
		v += other.v;
	}
	size_t v;
};

const x operator+ (x lh, x&amp; rh) // &lt;-- gibt const x zurück
{
	lh+=rh;
	return lh;
}

int main()
{
	x a,b,c;
        ...
	if (a + b = c)
	{
		std::cout &lt;&lt; &quot;whoa&quot;;
	}
	return 0;
}
</code></pre>
<p>Dieses Beispiel würde ohne konstanten Rückgabewert wunderbar kompilieren, aber mit Sicherheit nicht das tun was es soll.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1836927</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1836927</guid><dc:creator><![CDATA[brotbernd]]></dc:creator><pubDate>Mon, 11 Jan 2010 16:45:23 GMT</pubDate></item><item><title><![CDATA[Reply to Getter on Mon, 11 Jan 2010 17:19:55 GMT]]></title><description><![CDATA[<p>Nein, dein Beispiel funktioniert weder mit noch ohne const (für die Zuweisung muß ein sog. L-Value vorliegen, d.h. z.B. eine nicht-konstante Referenz).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1836953</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1836953</guid><dc:creator><![CDATA[Th69]]></dc:creator><pubDate>Mon, 11 Jan 2010 17:19:55 GMT</pubDate></item><item><title><![CDATA[Reply to Getter on Mon, 11 Jan 2010 17:25:29 GMT]]></title><description><![CDATA[<p>Doch das läuft. Habs grad nochmal probiert. Das steht auch irgendwo ganz vorne in effective c++.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1836957</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1836957</guid><dc:creator><![CDATA[brotbernd]]></dc:creator><pubDate>Mon, 11 Jan 2010 17:25:29 GMT</pubDate></item><item><title><![CDATA[Reply to Getter on Mon, 11 Jan 2010 17:27:37 GMT]]></title><description><![CDATA[<p>Das ist völlig in Ordnung. Das ist ein temporäres Objekt, welches einfach nur in genau dem Ausdruck, indem er gebraucht wird lebt. Es ist ein völlig korrekte L-Value.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1836959</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1836959</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Mon, 11 Jan 2010 17:27:37 GMT</pubDate></item><item><title><![CDATA[Reply to Getter on Tue, 12 Jan 2010 11:39:08 GMT]]></title><description><![CDATA[<p>Ok, habe es gerade mal mit verschiedenen Compilern getestet.<br />
Beim Borland C++ Builder 5 kam die von mir erwartete Fehlermeldung &quot;No L-Value&quot; (ich weiß, ist schon ein älterer Compiler).<br />
Aber sowohl MSVC 2003 als auch 2005 haben die Non-Const-Version jeweils fehlerfrei kompiliert (sogar bei einer Funktion anstatt einem Operator).</p>
<p>Kann mir vllt. jemand den Paragraphen im C++ Standard nennen? (weil ich sehe darin einfach keinen Sinn - und ich werde auch weiterhin Rückgabewerte von Wertetypen ohne &quot;const&quot; deklarieren!)</p>
<p>In &quot;Effective C++&quot; unter &quot;Item 21&quot; steht zwar auch, daß man &quot;const&quot; bei den Operatoren von benutzerdefinierten Typen verwenden soll, aber nicht warum dies generell erlaubt wird.</p>
<p>Bei nichtkonstanten Referenzen als Parameter werden ja auch keine temporären Objekte erlaubt.</p>
<p>Und ich hatte vor kurzem in einem Beitrag noch geschrieben, daß C++ vollkommen logisch sei -)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1837449</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1837449</guid><dc:creator><![CDATA[Th69]]></dc:creator><pubDate>Tue, 12 Jan 2010 11:39:08 GMT</pubDate></item><item><title><![CDATA[Reply to Getter on Tue, 12 Jan 2010 12:57:27 GMT]]></title><description><![CDATA[<p>Das müsste irgendwo bei temporären Objekte in Ausdrücken sein. Atm kann ich nicht nachschauen, aber das solltest du schon finden. (irgendwo bei expressions)</p>
<p>Hmm. Ich dachte, dass in Effective C++ erklärt steht, warum das so gemacht werden sollte. Muss auch mal noch nachschauen..</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1837503</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1837503</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Tue, 12 Jan 2010 12:57:27 GMT</pubDate></item><item><title><![CDATA[Reply to Getter on Tue, 12 Jan 2010 18:32:24 GMT]]></title><description><![CDATA[<p>drakon schrieb:</p>
<blockquote>
<p>Das ist ein temporäres Objekt, welches einfach nur in genau dem Ausdruck, indem er gebraucht wird lebt. Es ist ein völlig korrekte L-Value.</p>
</blockquote>
<p>Speziell ist hier eben, dass es sich <strong>nicht</strong> um ein LValue handelt.</p>
<p>C++-Standard, 3.10 schrieb:</p>
<blockquote>
<p><strong>5</strong> The result of calling a function that does not return a reference is an rvalue. User defined operators are functions, and whether such operators expect or yield lvalues is determined by their parameter and return types.</p>
<p><strong>10</strong> An lvalue for an object is necessary in order to modify the object except that an rvalue of class type can also be used to modify its referent under certain circumstances.</p>
</blockquote>
<p>Im Weiteren hat camper einmal ziemlich ausführlich gegen Operatoren mit <code>const</code> -qualifiziertem Rückgabetyp argumentiert. <a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-35603-and-postdays-is-0-and-postorder-is-asc-and-start-is-10.html" rel="nofollow">Hier</a> wäre sein Beitrag zu sehen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1837777</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1837777</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Tue, 12 Jan 2010 18:32:24 GMT</pubDate></item><item><title><![CDATA[Reply to Getter on Tue, 12 Jan 2010 19:08:19 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>drakon schrieb:</p>
<blockquote>
<p>Das ist ein temporäres Objekt, welches einfach nur in genau dem Ausdruck, indem er gebraucht wird lebt. Es ist ein völlig korrekte L-Value.</p>
</blockquote>
<p>Speziell ist hier eben, dass es sich <strong>nicht</strong> um ein LValue handelt.</p>
</blockquote>
<p>Hmm, Ok. Ich habe den Begriff nicht vorsichtig genug benutzt, aber dass man das Objekt verändern darf man ja.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1837806</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1837806</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Tue, 12 Jan 2010 19:08:19 GMT</pubDate></item></channel></rss>