<?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[Zuweisung an const Referenzen in Templates]]></title><description><![CDATA[<p>Hallo zusammen,<br />
bei unten angegebenem Code habe ich folgendes Problem: Und zwar verstehe ich nicht, wieso ich im Konstruktor diese Zuweisung durchführen kann, obwohl m_t const ist. Dies gilt jedoch nur für den Fall, wenn T eine Referenz auf irgendwas ist. Ist T ein Objekt, bekomme ich den erwarteten Compiler-Fehler. Es ist doch quasi genau das gleiche wie in den ersten drei Zeilen von main.</p>
<p>Vielen Dank.</p>
<p>peeri</p>
<pre><code class="language-cpp">template &lt;typename T&gt;
class X{
public:
    X(T param):m_t(param)
    {
        m_t = param;    // geht, wenn T Referenz ist. Warum?
    }

    const T m_t;
};

int main()
{
	int i=1234;
	const int&amp; ci = i;
	//ci = i;  // geht nicht, weil ci const ist

	X&lt;int&amp;&gt; x(i);
	return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/153935/zuweisung-an-const-referenzen-in-templates</link><generator>RSS for Node</generator><lastBuildDate>Mon, 07 Sep 2026 18:15:35 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/153935.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 22 Jul 2006 08:46:34 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Zuweisung an const Referenzen in Templates on Sat, 22 Jul 2006 08:46:34 GMT]]></title><description><![CDATA[<p>Hallo zusammen,<br />
bei unten angegebenem Code habe ich folgendes Problem: Und zwar verstehe ich nicht, wieso ich im Konstruktor diese Zuweisung durchführen kann, obwohl m_t const ist. Dies gilt jedoch nur für den Fall, wenn T eine Referenz auf irgendwas ist. Ist T ein Objekt, bekomme ich den erwarteten Compiler-Fehler. Es ist doch quasi genau das gleiche wie in den ersten drei Zeilen von main.</p>
<p>Vielen Dank.</p>
<p>peeri</p>
<pre><code class="language-cpp">template &lt;typename T&gt;
class X{
public:
    X(T param):m_t(param)
    {
        m_t = param;    // geht, wenn T Referenz ist. Warum?
    }

    const T m_t;
};

int main()
{
	int i=1234;
	const int&amp; ci = i;
	//ci = i;  // geht nicht, weil ci const ist

	X&lt;int&amp;&gt; x(i);
	return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1102119</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1102119</guid><dc:creator><![CDATA[peeri]]></dc:creator><pubDate>Sat, 22 Jul 2006 08:46:34 GMT</pubDate></item><item><title><![CDATA[Reply to Zuweisung an const Referenzen in Templates on Sat, 22 Jul 2006 09:08:53 GMT]]></title><description><![CDATA[<p>es gibt keine const referenzen. das const in der deklaration von m_t wird einfach ignoriert, wenn T ein referenztyp ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1102129</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1102129</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Sat, 22 Jul 2006 09:08:53 GMT</pubDate></item><item><title><![CDATA[Reply to Zuweisung an const Referenzen in Templates on Sat, 22 Jul 2006 09:26:55 GMT]]></title><description><![CDATA[<p>Das const wird nicht ignoriert. Es hat nur keinerlei bedeutung bei referenzen.<br />
nach der initialisierung verhält sich eine Referenz genau wie das Objekt, das es darstellt. der op= ist also nicht der der Referenz, sonder der vom Objekt.</p>
<pre><code class="language-cpp">m_t = param;
</code></pre>
<p>Hier veränderst du also nurnoch das objekt hinter m_t und nicht m_t selber. Da sich das const aber nur auf die Referenz bezieht und nicht auf das Objekt, ist dies legal.</p>
<p>In deinem Beispiel in der main ist die sache etwas anders. Ich mach das mal mit Klammern deutlich:</p>
<pre><code class="language-cpp">//du denkst, es wäre so:
const (int&amp;) ci = i;

//der compiler interpretiert das aber so:
(const int)&amp; ci = i;

//den ersten Fall würdest du so erreichen
int&amp; const ci = i;
</code></pre>
<p>Hier versuchst du also, dem constanten Objekt hinter der referenz etwas zuzuweisen, was natürlich nicht gehen kann. Auch wenn constante referenzen natürlich keinen Sinn machen, ist das wissen darüber schon recht wichtig, da sich zeiger exakt genauso verhalten. Einen zeiger macht man also konstant, indem man das const hinter das &quot;*&quot; setzt. Das Objekt hinter einem zeiger wird konstant, wenn das const am Anfang ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1102133</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1102133</guid><dc:creator><![CDATA[otze]]></dc:creator><pubDate>Sat, 22 Jul 2006 09:26:55 GMT</pubDate></item><item><title><![CDATA[Reply to Zuweisung an const Referenzen in Templates on Sat, 22 Jul 2006 10:14:07 GMT]]></title><description><![CDATA[<p>Vielen Dank für die ausführliche Antwort. Jetzt wird mir schon einiges klarer.</p>
<p>Gruß<br />
peeri</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1102149</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1102149</guid><dc:creator><![CDATA[peeri]]></dc:creator><pubDate>Sat, 22 Jul 2006 10:14:07 GMT</pubDate></item><item><title><![CDATA[Reply to Zuweisung an const Referenzen in Templates on Sat, 22 Jul 2006 10:23:04 GMT]]></title><description><![CDATA[<p>otze schrieb:</p>
<blockquote>
<p>Das const wird nicht ignoriert.</p>
</blockquote>
<blockquote>
<pre><code class="language-cpp">int&amp; const ci = i;
</code></pre>
</blockquote>
<p>ill-formed nach 8.3.2/1</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1102156</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1102156</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Sat, 22 Jul 2006 10:23:04 GMT</pubDate></item></channel></rss>