<?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[Merkwürdiges Verhalten vom auto-Keyword]]></title><description><![CDATA[<p>Hallo,</p>
<p>mir ist im Zusammenhang mit dem auto-Keyword in MS Visual Studio 2010 ein Verhalten aufgefallen, das sehr merkwürdig ist. Oder ist es ein Fehler im Compiler.</p>
<p>Ich habe einen Container Queue in dem ich Elemente einer Klasse verwalte. Mit der Methode getJob hole ich mir eine Referenz auf ein Objekt. Bei diesem Objekt will ich den Value verändern.</p>
<p>Wenn ich das auto-Keyword verwende, erwarte ich das die Variable j vom Typ Referenz auf Job ist, weil dies der Rückgabetyp von getJob ist. Er gibt aber<br />
keine Referenz zurück, sondern die Variable direkt.</p>
<pre><code class="language-cpp">auto j = q.getJob(3);
</code></pre>
<p>Wenn ich die Variable j direkt als Referenz auf Job definiere, klappt alles super.</p>
<pre><code class="language-cpp">Job&amp; j = q.getJob(3);
</code></pre>
<p>Hier ein lauffähiges Beispiel, das das Problem zeigt.</p>
<p>Hinweis: Dies ist ein vereinfachtes Beispiel, das das mein Verständnisproblem verdeutlich und nicht komplett.</p>
<pre><code class="language-cpp">#include &quot;stdafx.h&quot;

#include &lt;iostream&gt;
#include &lt;vector&gt;

class Job
{
	int m_id;
	int m_value;

public:
	Job() : m_id(0), m_value(0) {}
	Job(const int id, const int value) : m_id(id), m_value(value) {}

	int id() const {return m_id;}
	int value() {return m_value;}
	void value(const int v) {m_value = v;}
};

class Queue
{
	std::vector&lt;Job&gt; v;

public:
	Queue() 
	{
		v.push_back(Job(1, 12));
		v.push_back(Job(2, 24));
		v.push_back(Job(3, 36));
		v.push_back(Job(4, 48));
		v.push_back(Job(5, 60));
		v.push_back(Job(6, 72));
	}

	Job&amp; getJob(const int id)
	{
		for (auto it(v.begin()); it != v.end(); ++it)
			if ((*it).id() == id)
				return *it;
	}

	template&lt;typename C&gt;
	void showContainer(C c)
	{
		for (auto it(c.begin()); it != c.end(); ++it)
			std::cout &lt;&lt; (*it).id() &lt;&lt; &quot; : &quot; &lt;&lt; (*it).value() &lt;&lt; std::endl;
	}

	void showQueue() {showContainer(v);}
};

int main()
{
	Queue q;	

	q.showQueue();

	auto j = q.getJob(3);
	// Job&amp; j = q.getJob(3);
	j.value(30);

	q.showQueue();

	std::cin.get();

	return 0;
}
</code></pre>
<p>Kann einer dieses Verhalten erklären</p>
<p>Gruss<br />
Ludger</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/308165/merkwürdiges-verhalten-vom-auto-keyword</link><generator>RSS for Node</generator><lastBuildDate>Thu, 06 Aug 2026 02:03:57 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/308165.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 17 Sep 2012 08:22:32 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Merkwürdiges Verhalten vom auto-Keyword on Mon, 17 Sep 2012 08:22:32 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>mir ist im Zusammenhang mit dem auto-Keyword in MS Visual Studio 2010 ein Verhalten aufgefallen, das sehr merkwürdig ist. Oder ist es ein Fehler im Compiler.</p>
<p>Ich habe einen Container Queue in dem ich Elemente einer Klasse verwalte. Mit der Methode getJob hole ich mir eine Referenz auf ein Objekt. Bei diesem Objekt will ich den Value verändern.</p>
<p>Wenn ich das auto-Keyword verwende, erwarte ich das die Variable j vom Typ Referenz auf Job ist, weil dies der Rückgabetyp von getJob ist. Er gibt aber<br />
keine Referenz zurück, sondern die Variable direkt.</p>
<pre><code class="language-cpp">auto j = q.getJob(3);
</code></pre>
<p>Wenn ich die Variable j direkt als Referenz auf Job definiere, klappt alles super.</p>
<pre><code class="language-cpp">Job&amp; j = q.getJob(3);
</code></pre>
<p>Hier ein lauffähiges Beispiel, das das Problem zeigt.</p>
<p>Hinweis: Dies ist ein vereinfachtes Beispiel, das das mein Verständnisproblem verdeutlich und nicht komplett.</p>
<pre><code class="language-cpp">#include &quot;stdafx.h&quot;

#include &lt;iostream&gt;
#include &lt;vector&gt;

class Job
{
	int m_id;
	int m_value;

public:
	Job() : m_id(0), m_value(0) {}
	Job(const int id, const int value) : m_id(id), m_value(value) {}

	int id() const {return m_id;}
	int value() {return m_value;}
	void value(const int v) {m_value = v;}
};

class Queue
{
	std::vector&lt;Job&gt; v;

public:
	Queue() 
	{
		v.push_back(Job(1, 12));
		v.push_back(Job(2, 24));
		v.push_back(Job(3, 36));
		v.push_back(Job(4, 48));
		v.push_back(Job(5, 60));
		v.push_back(Job(6, 72));
	}

	Job&amp; getJob(const int id)
	{
		for (auto it(v.begin()); it != v.end(); ++it)
			if ((*it).id() == id)
				return *it;
	}

	template&lt;typename C&gt;
	void showContainer(C c)
	{
		for (auto it(c.begin()); it != c.end(); ++it)
			std::cout &lt;&lt; (*it).id() &lt;&lt; &quot; : &quot; &lt;&lt; (*it).value() &lt;&lt; std::endl;
	}

	void showQueue() {showContainer(v);}
};

int main()
{
	Queue q;	

	q.showQueue();

	auto j = q.getJob(3);
	// Job&amp; j = q.getJob(3);
	j.value(30);

	q.showQueue();

	std::cin.get();

	return 0;
}
</code></pre>
<p>Kann einer dieses Verhalten erklären</p>
<p>Gruss<br />
Ludger</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2251786</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2251786</guid><dc:creator><![CDATA[Acho]]></dc:creator><pubDate>Mon, 17 Sep 2012 08:22:32 GMT</pubDate></item><item><title><![CDATA[Reply to Merkwürdiges Verhalten vom auto-Keyword on Mon, 17 Sep 2012 08:24:59 GMT]]></title><description><![CDATA[<p>Acho schrieb:</p>
<blockquote>
<p>Wenn ich das auto-Keyword verwende, erwarte ich das die Variable j vom Typ Referenz auf Job ist, weil dies der Rückgabetyp von getJob ist.</p>
</blockquote>
<p>Damit erwartest du was falsches. Laut Standard ist eine Variable, die mit auto deklariert/definiert wird, nie &quot;von selbst&quot; eine Referenz. Du musst also explizit dran schreiben, dass du nur eine Referenz und keine Kopie haben möchtest.</p>
<pre><code class="language-cpp">auto&amp; j = q.getJob(3);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2251789</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2251789</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Mon, 17 Sep 2012 08:24:59 GMT</pubDate></item><item><title><![CDATA[Reply to Merkwürdiges Verhalten vom auto-Keyword on Mon, 17 Sep 2012 08:32:52 GMT]]></title><description><![CDATA[<p>Danke!</p>
<p>Dann liefert auto nur den Typ!</p>
<p>Mit</p>
<pre><code class="language-cpp">auto&amp; j = q.getJob(3);
</code></pre>
<p>klappt es auch. Super</p>
<p>Gruss<br />
Ludger</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2251792</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2251792</guid><dc:creator><![CDATA[Acho]]></dc:creator><pubDate>Mon, 17 Sep 2012 08:32:52 GMT</pubDate></item><item><title><![CDATA[Reply to Merkwürdiges Verhalten vom auto-Keyword on Mon, 17 Sep 2012 09:09:21 GMT]]></title><description><![CDATA[<blockquote>
<p>Dann liefert auto nur den Typ!</p>
</blockquote>
<p>So einfach ist es nicht. Wenn deine Funktion z.B. ein Job* zurückgegeben hätte, wäre der deduzierte Typ auch Job*.</p>
<p>Für die Deduktion bei auto gelten die gleichen Regeln wie bei der Deduktion von Template Argumenten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2251801</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2251801</guid><dc:creator><![CDATA[theta]]></dc:creator><pubDate>Mon, 17 Sep 2012 09:09:21 GMT</pubDate></item><item><title><![CDATA[Reply to Merkwürdiges Verhalten vom auto-Keyword on Mon, 17 Sep 2012 09:37:22 GMT]]></title><description><![CDATA[<p>Danke für diesen Hinweis,</p>
<p>damit muss ich mich nochmal beschäftigen. Gibt es über das Thema (Deduktion von Template Argumenten) eine gute Dokumentation im Web bzw. Buch.</p>
<p>Gruss<br />
Ludger.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2251813</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2251813</guid><dc:creator><![CDATA[Acho]]></dc:creator><pubDate>Mon, 17 Sep 2012 09:37:22 GMT</pubDate></item><item><title><![CDATA[Reply to Merkwürdiges Verhalten vom auto-Keyword on Mon, 17 Sep 2012 11:11:14 GMT]]></title><description><![CDATA[<p>Acho schrieb:</p>
<blockquote>
<p>Gibt es über das Thema (Deduktion von Template Argumenten) eine gute Dokumentation im Web bzw. Buch.</p>
</blockquote>
<p>Google doch mal nach &quot;template argument deduction&quot;, da sollte auf jeden Fall was dabei sein - die Video-Vorlesung von STL dürfte auf jeden Fall schonmal ein guter Aufhänger sein. Als Buch ist in dem Zusammenhang &quot;C++ Templates - The Complete Guide&quot; von Josuttis/Vandervoorde zu empfehlen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2251886</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2251886</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Mon, 17 Sep 2012 11:11:14 GMT</pubDate></item><item><title><![CDATA[Reply to Merkwürdiges Verhalten vom auto-Keyword on Tue, 18 Sep 2012 09:58:16 GMT]]></title><description><![CDATA[<p>Danke,</p>
<p>das Buch steht sogar schon im Regal. Hatte bisher nurnoch nicht die Zeit es zu lesen. Und Lonks zu den Videos über die STL hatte ich mir auch schon gespeichert.</p>
<p>Nochmals Danke<br />
Ludger.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2252247</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2252247</guid><dc:creator><![CDATA[Acho]]></dc:creator><pubDate>Tue, 18 Sep 2012 09:58:16 GMT</pubDate></item><item><title><![CDATA[Reply to Merkwürdiges Verhalten vom auto-Keyword on Tue, 18 Sep 2012 10:00:40 GMT]]></title><description><![CDATA[<p>Acho schrieb:</p>
<blockquote>
<p>Lonks zu den Videos über die STL hatte ich mir auch schon gespeichert.</p>
</blockquote>
<p>STL != STL <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="😉"
    /><br />
Ich meine nicht Videos <em>über</em> die STL (Standard Template Library, was manche etwas fahrlässig inkorrekt mit der C++-Standardbibliothek gleichsetzen), sondern Videos <em>von</em> STL (Stephan T. Lavavej, einer der Bibliotheksentwickler von MS)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2252249</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2252249</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Tue, 18 Sep 2012 10:00:40 GMT</pubDate></item><item><title><![CDATA[Reply to Merkwürdiges Verhalten vom auto-Keyword on Tue, 18 Sep 2012 10:28:15 GMT]]></title><description><![CDATA[<p>Danke für den Hinweis,</p>
<p>die Core C++ sind mir neu, aber sehr interessant.</p>
<p>Gruss<br />
Ludger.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2252260</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2252260</guid><dc:creator><![CDATA[Acho]]></dc:creator><pubDate>Tue, 18 Sep 2012 10:28:15 GMT</pubDate></item></channel></rss>