<?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[&#x2F;&#x2F;template - std::vector - cannot convert cannot convert from &#x27;std::_Vb_reference&amp;lt;_MycontTy&amp;gt;&#x27; to &#x27;bool &amp;amp;&#x27;]]></title><description><![CDATA[<p>wieso kommt bei foo1 eine Fehlermedlung?</p>
<pre><code class="language-cpp">template&lt;typename T&gt;
class Klasse
{
public:
   Klasse() : member1(false) { member2.resize(1,false);} 

   T&amp; foo2() { return member1;    }
   T&amp; foo1() { return member2[0]; }

private:
   T member1;
   std::vector&lt;T&gt; member2;
};

int main()
{
   Klasse&lt;bool&gt; zz;
   zz.foo1() =false ; //-&gt;error beim compilieren
   zz.foo2() =false ;
}
</code></pre>
<p>Fehler tritt weder bei int, float, double, etc. auf. Aber bei bool haut es nicht hin. (MSVC 2005 team edition + SP1)</p>
<pre><code>error C2440: 'return' : cannot convert from 'std::_Vb_reference&lt;_MycontTy&gt;' to 'bool &amp;'
with
[
   _MycontTy=std::vector&lt;bool,std::allocator&lt;bool&gt;&gt;
]
while compiling class template member function 'bool &amp;Klasse&lt;T&gt;::foo1(void)'
with
[
   T=bool
]
see reference to class template instantiation 'Klasse&lt;T&gt;' being compiled
with
[
   T=bool
]
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/204859/template-std-vector-cannot-convert-cannot-convert-from-std-_vb_reference-lt-_mycontty-gt-to-bool-amp</link><generator>RSS for Node</generator><lastBuildDate>Thu, 08 Oct 2026 20:26:09 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/204859.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 07 Feb 2008 18:09:44 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to &#x2F;&#x2F;template - std::vector - cannot convert cannot convert from &#x27;std::_Vb_reference&amp;lt;_MycontTy&amp;gt;&#x27; to &#x27;bool &amp;amp;&#x27; on Thu, 07 Feb 2008 18:09:44 GMT]]></title><description><![CDATA[<p>wieso kommt bei foo1 eine Fehlermedlung?</p>
<pre><code class="language-cpp">template&lt;typename T&gt;
class Klasse
{
public:
   Klasse() : member1(false) { member2.resize(1,false);} 

   T&amp; foo2() { return member1;    }
   T&amp; foo1() { return member2[0]; }

private:
   T member1;
   std::vector&lt;T&gt; member2;
};

int main()
{
   Klasse&lt;bool&gt; zz;
   zz.foo1() =false ; //-&gt;error beim compilieren
   zz.foo2() =false ;
}
</code></pre>
<p>Fehler tritt weder bei int, float, double, etc. auf. Aber bei bool haut es nicht hin. (MSVC 2005 team edition + SP1)</p>
<pre><code>error C2440: 'return' : cannot convert from 'std::_Vb_reference&lt;_MycontTy&gt;' to 'bool &amp;'
with
[
   _MycontTy=std::vector&lt;bool,std::allocator&lt;bool&gt;&gt;
]
while compiling class template member function 'bool &amp;Klasse&lt;T&gt;::foo1(void)'
with
[
   T=bool
]
see reference to class template instantiation 'Klasse&lt;T&gt;' being compiled
with
[
   T=bool
]
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1451432</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1451432</guid><dc:creator><![CDATA[muffmolch]]></dc:creator><pubDate>Thu, 07 Feb 2008 18:09:44 GMT</pubDate></item><item><title><![CDATA[Reply to &#x2F;&#x2F;template - std::vector - cannot convert cannot convert from &#x27;std::_Vb_reference&amp;lt;_MycontTy&amp;gt;&#x27; to &#x27;bool &amp;amp;&#x27; on Thu, 07 Feb 2008 18:14:19 GMT]]></title><description><![CDATA[<p>Weil die Spezialisierung vector&lt;bool&gt; kein richtiger Container ist und auch keine bools speichert. Konsequenterweise ist der Rückgabetyp des Indexoperators auch keine richtige Referenz sondern ein Proxyobjekt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1451434</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1451434</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Thu, 07 Feb 2008 18:14:19 GMT</pubDate></item><item><title><![CDATA[Reply to &#x2F;&#x2F;template - std::vector - cannot convert cannot convert from &#x27;std::_Vb_reference&amp;lt;_MycontTy&amp;gt;&#x27; to &#x27;bool &amp;amp;&#x27; on Thu, 07 Feb 2008 18:20:48 GMT]]></title><description><![CDATA[<p>kann man das irgendwie fixen? also so, dass das ganze auch für bools geht? ohne die klasse für bools zu spezialisieren?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1451436</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1451436</guid><dc:creator><![CDATA[muffmolch]]></dc:creator><pubDate>Thu, 07 Feb 2008 18:20:48 GMT</pubDate></item><item><title><![CDATA[Reply to &#x2F;&#x2F;template - std::vector - cannot convert cannot convert from &#x27;std::_Vb_reference&amp;lt;_MycontTy&amp;gt;&#x27; to &#x27;bool &amp;amp;&#x27; on Thu, 07 Feb 2008 18:33:55 GMT]]></title><description><![CDATA[<p>tuts nicht auch ein anderer Container?<br />
Sonst mach den Rückgabetyp von foo1 zu dem was vector&lt;T&gt;::operator[] zurück gibt: vector&lt;T&gt;::reference_type</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1451444</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1451444</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Thu, 07 Feb 2008 18:33:55 GMT</pubDate></item><item><title><![CDATA[Reply to &#x2F;&#x2F;template - std::vector - cannot convert cannot convert from &#x27;std::_Vb_reference&amp;lt;_MycontTy&amp;gt;&#x27; to &#x27;bool &amp;amp;&#x27; on Thu, 07 Feb 2008 18:45:22 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">typename vector&lt;T&gt;::reference foo1() { return member2[0]; }
</code></pre>
<p>Wie pumuckl schon erwähnt hat ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1451455</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1451455</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Thu, 07 Feb 2008 18:45:22 GMT</pubDate></item><item><title><![CDATA[Reply to &#x2F;&#x2F;template - std::vector - cannot convert cannot convert from &#x27;std::_Vb_reference&amp;lt;_MycontTy&amp;gt;&#x27; to &#x27;bool &amp;amp;&#x27; on Fri, 08 Feb 2008 07:46:44 GMT]]></title><description><![CDATA[<p>KasF schrieb:</p>
<blockquote>
<pre><code class="language-cpp">typename vector&lt;T&gt;::reference foo1() { return member2[0]; }
</code></pre>
<p>Wie pumuckl schon erwähnt hat ...</p>
</blockquote>
<p>danke euch beiden. genau das was ich gesucht habe!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1451718</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1451718</guid><dc:creator><![CDATA[muffmolch]]></dc:creator><pubDate>Fri, 08 Feb 2008 07:46:44 GMT</pubDate></item><item><title><![CDATA[Reply to &#x2F;&#x2F;template - std::vector - cannot convert cannot convert from &#x27;std::_Vb_reference&amp;lt;_MycontTy&amp;gt;&#x27; to &#x27;bool &amp;amp;&#x27; on Fri, 08 Feb 2008 07:52:52 GMT]]></title><description><![CDATA[<p>camper schrieb:</p>
<blockquote>
<p>Weil die Spezialisierung vector&lt;bool&gt; kein richtiger Container ist und auch keine bools speichert. Konsequenterweise ist der Rückgabetyp des Indexoperators auch keine richtige Referenz sondern ein Proxyobjekt.</p>
</blockquote>
<p>was genau speichert er dann? ein bool hat 1byte womit man an sich 7 Bits verschenkt.</p>
<p>andere Frage:<br />
die rückgabe &quot;typename std::vector&lt;T&gt;::reference&quot; erfordert ggegn über T&amp; für andere typen keine zusatzzeit, oder doch?</p>
<p>anders: wo genau liegt der nachteil bei typename std::vector&lt;T&gt;::const_reference?</p>
<p>da der vector der datencontainer der matrixklasse ist, kann/möchte ich den vector auch nicht ändern</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1451725</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1451725</guid><dc:creator><![CDATA[muffmolch]]></dc:creator><pubDate>Fri, 08 Feb 2008 07:52:52 GMT</pubDate></item><item><title><![CDATA[Reply to &#x2F;&#x2F;template - std::vector - cannot convert cannot convert from &#x27;std::_Vb_reference&amp;lt;_MycontTy&amp;gt;&#x27; to &#x27;bool &amp;amp;&#x27; on Fri, 08 Feb 2008 08:06:39 GMT]]></title><description><![CDATA[<p>vector&lt;bool&gt; wird so optimiert sein, dass eben nicht 7 Bit pro Flag verschenkt werden. Wie <strong>genau</strong> er das macht, bleibt aber der Implementierung überlassen. Möglicherweise speichert er ein Array von Bytes und holt die einzelnen Flags mit Bitschubserei dort raus.</p>
<p>Bei der Benutzung von typedefs hast Du grundsätzlich erstmal garkeine Nachteile, da das alles zur Compilierungszeit aufgelöst wird. Zur Laufzeit gibt es keine Typen mehr. Natürlich könnte das, was vector&lt;bool&gt;::reference ist, bei bestimmten Folgeoperationen (z.B. bei der Zuweisung eines Wertes) langsamer sein als ein bool&amp;, aber das ist nicht von Interesse, da der vector&lt;bool&gt; eben keine bool&amp; enthält. Du hast sogar einen großen Vorteil: Egal ob vector&lt;bool&gt; oder sonst irgendein Typ, Du hast mit vector&lt;T&gt;::reference immer den Typ, den operator[] zurückgibt, auch wenn es nicht T&amp; ist.</p>
<p>Der Nachteil (?) von const_reference ggü. reference ist, dass der Wert konstant ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1451729</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1451729</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Fri, 08 Feb 2008 08:06:39 GMT</pubDate></item><item><title><![CDATA[Reply to &#x2F;&#x2F;template - std::vector - cannot convert cannot convert from &#x27;std::_Vb_reference&amp;lt;_MycontTy&amp;gt;&#x27; to &#x27;bool &amp;amp;&#x27; on Fri, 08 Feb 2008 08:20:13 GMT]]></title><description><![CDATA[<p>Wenn du den Inhalt des Vectors nicht ändern willst, sprich die einzelnen Bools nicht verändern willst, dann kannst du const_reference nehmen, musst dann aber schauen, dass foo1 auch als const deklariert ist. Denn nur wenn das Objekt udn damit der vector const ist, wirst du von C++ auch ne const_reference bekommen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1451741</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1451741</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Fri, 08 Feb 2008 08:20:13 GMT</pubDate></item><item><title><![CDATA[Reply to &#x2F;&#x2F;template - std::vector - cannot convert cannot convert from &#x27;std::_Vb_reference&amp;lt;_MycontTy&amp;gt;&#x27; to &#x27;bool &amp;amp;&#x27; on Fri, 08 Feb 2008 08:43:55 GMT]]></title><description><![CDATA[<p>muffmolch schrieb:</p>
<blockquote>
<p>anders: wo genau liegt der nachteil bei typename std::vector&lt;T&gt;::const_reference?</p>
</blockquote>
<p>sorry. mein fehler... copy&amp;paste <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 />
meinte natrülich nachteil zwischen T&amp; und std::vector&lt;T&gt;::reference...<br />
das &quot;const_&quot; war drinnen, da ich unsere matirx klassen grad angepaßt habe und beim const operator() braucht man auch ne const_reference...</p>
<p>danke für die ausführliche erklärung des sachverhaltes.. wieder was gelernt!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1451749</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1451749</guid><dc:creator><![CDATA[muffmolch]]></dc:creator><pubDate>Fri, 08 Feb 2008 08:43:55 GMT</pubDate></item><item><title><![CDATA[Reply to &#x2F;&#x2F;template - std::vector - cannot convert cannot convert from &#x27;std::_Vb_reference&amp;lt;_MycontTy&amp;gt;&#x27; to &#x27;bool &amp;amp;&#x27; on Fri, 08 Feb 2008 12:13:41 GMT]]></title><description><![CDATA[<p>pumuckl schrieb:</p>
<blockquote>
<p>Wenn du den Inhalt des Vectors nicht ändern willst, sprich die einzelnen Bools nicht verändern willst, dann kannst du const_reference nehmen, musst dann aber schauen, dass foo1 auch als const deklariert ist. Denn nur wenn das Objekt udn damit der vector const ist, wirst du von C++ auch ne const_reference bekommen.</p>
</blockquote>
<p>Das ist nicht notwendig. reference muss immer in const_reference konvertierbar sein. Natürlich ist es denkbar, dass die direkte Berechnung von const_reference effizienter ist oder andere Vorteile hat (z.B. bei basic_string).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1451898</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1451898</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Fri, 08 Feb 2008 12:13:41 GMT</pubDate></item></channel></rss>