<?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[Unterschiedliche Typen obwohl eigentlich gleich?]]></title><description><![CDATA[<p>Hallo!</p>
<p>Ich habe folgende Zeile:</p>
<pre><code class="language-cpp">uint resultDimension = coordVectors.size();
</code></pre>
<p>Diese Zeile liefert mir dieses Warning:</p>
<blockquote>
<p>warning C4267: 'initializing' : conversion from 'size_t' to 'uint', possible loss of data</p>
</blockquote>
<p>Das versteh ich nicht, denn mein uint ist ein typedef auf unsigned int und wenn ich in der IDE mit der Maus über size_t geh dann sagt er mir, dass size_t AUCH ein typedef auf unsigned int.<br />
Wieso zur Hölle gibt das dann ein Warning, wenn es exakt die gleichen Typen sind? (Und wie krieg ich das Warning am elegantesten weg? Casten? Ich könnte auch size_t resultDimension nehmen, aber das möchte ich eigentlich nicht, weil ich zb weiter unten den Wert an eine Funktion übergebe, die ein uint erwartet..)</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/243513/unterschiedliche-typen-obwohl-eigentlich-gleich</link><generator>RSS for Node</generator><lastBuildDate>Sun, 20 Sep 2026 00:33:21 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/243513.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 17 Jun 2009 16:50:06 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Unterschiedliche Typen obwohl eigentlich gleich? on Wed, 17 Jun 2009 16:50:06 GMT]]></title><description><![CDATA[<p>Hallo!</p>
<p>Ich habe folgende Zeile:</p>
<pre><code class="language-cpp">uint resultDimension = coordVectors.size();
</code></pre>
<p>Diese Zeile liefert mir dieses Warning:</p>
<blockquote>
<p>warning C4267: 'initializing' : conversion from 'size_t' to 'uint', possible loss of data</p>
</blockquote>
<p>Das versteh ich nicht, denn mein uint ist ein typedef auf unsigned int und wenn ich in der IDE mit der Maus über size_t geh dann sagt er mir, dass size_t AUCH ein typedef auf unsigned int.<br />
Wieso zur Hölle gibt das dann ein Warning, wenn es exakt die gleichen Typen sind? (Und wie krieg ich das Warning am elegantesten weg? Casten? Ich könnte auch size_t resultDimension nehmen, aber das möchte ich eigentlich nicht, weil ich zb weiter unten den Wert an eine Funktion übergebe, die ein uint erwartet..)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1728355</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1728355</guid><dc:creator><![CDATA[warner]]></dc:creator><pubDate>Wed, 17 Jun 2009 16:50:06 GMT</pubDate></item><item><title><![CDATA[Reply to Unterschiedliche Typen obwohl eigentlich gleich? on Wed, 17 Jun 2009 17:05:47 GMT]]></title><description><![CDATA[<p>Der Grund könnte sein, daß dein Compiler 64-Bit-Kompatibilitätswarnungen ausgibt. Und die korrekte Lösung scheint mir hier ein Cast nach uint zu sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1728370</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1728370</guid><dc:creator><![CDATA[audacia]]></dc:creator><pubDate>Wed, 17 Jun 2009 17:05:47 GMT</pubDate></item><item><title><![CDATA[Reply to Unterschiedliche Typen obwohl eigentlich gleich? on Wed, 17 Jun 2009 17:18:24 GMT]]></title><description><![CDATA[<p>warner schrieb:</p>
<blockquote>
<p>weil ich zb weiter unten den Wert an eine Funktion übergebe, die ein uint erwartet..)</p>
</blockquote>
<p>selbst geschrieben?<br />
eigtl kann ich mir kaum vorstellen, warum man uint dem size_t vorziehen sollte...<br />
ich würd an deiner stelle also die fkt ändern, wenn du sie selbst geschrieben hast... ansonsten würde ich die warning da lassen, da man sonst vll ungewollt den index &quot;beschneidet&quot;, wenn man auf ner x64 plattform arbeitet...</p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1728378</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1728378</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Wed, 17 Jun 2009 17:18:24 GMT</pubDate></item><item><title><![CDATA[Reply to Unterschiedliche Typen obwohl eigentlich gleich? on Wed, 17 Jun 2009 17:40:53 GMT]]></title><description><![CDATA[<p>unskilled schrieb:</p>
<blockquote>
<p>warner schrieb:</p>
<blockquote>
<p>weil ich zb weiter unten den Wert an eine Funktion übergebe, die ein uint erwartet..)</p>
</blockquote>
<p>selbst geschrieben?<br />
eigtl kann ich mir kaum vorstellen, warum man uint dem size_t vorziehen sollte...<br />
ich würd an deiner stelle also die fkt ändern, wenn du sie selbst geschrieben hast... ansonsten würde ich die warning da lassen, da man sonst vll ungewollt den index &quot;beschneidet&quot;, wenn man auf ner x64 plattform arbeitet...</p>
<p>bb</p>
</blockquote>
<p>Wieso sollte ich meine Funktion umschreiben? Mein uint hab NICHTS mit einer Größe zu tun - es ist einfach ein vorzeichenloser Int (abgesehen davon, dass ich uint wesentlich schöner als size_t finde)<br />
Ich caste jetzte einfach den size_t auf meinen uint.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1728397</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1728397</guid><dc:creator><![CDATA[warner]]></dc:creator><pubDate>Wed, 17 Jun 2009 17:40:53 GMT</pubDate></item><item><title><![CDATA[Reply to Unterschiedliche Typen obwohl eigentlich gleich? on Wed, 17 Jun 2009 18:05:17 GMT]]></title><description><![CDATA[<p>warner schrieb:</p>
<blockquote>
<p>Mein uint hab NICHTS mit einer Größe zu tun</p>
</blockquote>
<p>offensichtlich schon - sonst müsstest du nich iwann mal von nem size_t her casten...</p>
<p>Nein - cast würd ich aus oben genannten Gründen nicht nehmen...</p>
<p>und welche Nachteile hat denn ein size_t (dort) ggnüber dem uint?</p>
<p>die warnings sind eben nicht ganz um sonst da - aber wenn du es für den richtigen weg hältst, es mit nem cast zu lösen, dann lass es halt so - vll gibts deshalb iwann mal ne ganze menge unerklärlicher fehler, aber vll gehts auch gut...<br />
wenn du nicht für x64 programmieren willst, dann kannst du die kompatibilitätswarnungen auch deaktiveren und dann ist so gar der cast unnötig.</p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1728418</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1728418</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Wed, 17 Jun 2009 18:05:17 GMT</pubDate></item><item><title><![CDATA[Reply to Unterschiedliche Typen obwohl eigentlich gleich? on Wed, 17 Jun 2009 19:31:44 GMT]]></title><description><![CDATA[<p>unskilled schrieb:</p>
<blockquote>
<p>warner schrieb:</p>
<blockquote>
<p>Mein uint hab NICHTS mit einer Größe zu tun</p>
</blockquote>
<p>offensichtlich schon - sonst müsstest du nich iwann mal von nem size_t her casten...</p>
</blockquote>
<p>Offensichtlich hast du seinen Post nicht gelesen.</p>
<p>warner schrieb:</p>
<blockquote>
<pre><code class="language-cpp">uint resultDimension = coordVectors.size();
</code></pre>
</blockquote>
<p>Wenn seine Nomenklatur aussagekräftig ist, will er die Dimension eines Vektors feststellen. Ob und inwiefern sein Ansatz dafür angebracht ist, kann ohne mehr Code freilich nicht beurteilt werden - aber auch die Aussage &quot;Mein uint hat NICHTS mit einer Größe zu tun&quot; ist IMHO hinreichend eindeutig. std::vector&lt;&gt;::size() gibt nun mal size_t zurück; in einer konsequenten Anwendung der Analogie aus der Mathematik hätte die Methode dimension() geheißen und uint zurückgegeben. (Ich will nicht sagen, daß das für den Anwendungszweck von std::vector&lt;&gt; angemessener wäre - eher, daß die gewählte Analogie fraglich ist und die Klasse std::array&lt;&gt; hätte heißen sollen.) Entsprechend sehe ich keinen Grund, size_t für irgendetwas zu verwenden, das keine Größe ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1728454</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1728454</guid><dc:creator><![CDATA[audacia]]></dc:creator><pubDate>Wed, 17 Jun 2009 19:31:44 GMT</pubDate></item><item><title><![CDATA[Reply to Unterschiedliche Typen obwohl eigentlich gleich? on Wed, 17 Jun 2009 21:51:27 GMT]]></title><description><![CDATA[<blockquote>
<p>Entsprechend sehe ich keinen Grund, size_t für irgendetwas zu verwenden, das keine Größe ist.</p>
</blockquote>
<p>Eine Dimensions-Anzahl *ist* eine Grösse.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1728508</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1728508</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Wed, 17 Jun 2009 21:51:27 GMT</pubDate></item><item><title><![CDATA[Reply to Unterschiedliche Typen obwohl eigentlich gleich? on Wed, 17 Jun 2009 23:48:28 GMT]]></title><description><![CDATA[<p>Schwachsinn. size_t hat klar einen Bezug zu Größe wie Größe eines Vektors. Wenn man Funktionen hat, die einfach einen unsigned int brauchen um damit Dinge wie Rekursionstiefe, Indizes etc zu beschreiben, würde ich auch niemals size_t nehmen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1728523</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1728523</guid><dc:creator><![CDATA[Einwand++]]></dc:creator><pubDate>Wed, 17 Jun 2009 23:48:28 GMT</pubDate></item><item><title><![CDATA[Reply to Unterschiedliche Typen obwohl eigentlich gleich? on Wed, 17 Jun 2009 23:54:33 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>...</p>
</blockquote>
<p>/signed</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1728525</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1728525</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Wed, 17 Jun 2009 23:54:33 GMT</pubDate></item><item><title><![CDATA[Reply to Unterschiedliche Typen obwohl eigentlich gleich? on Thu, 18 Jun 2009 00:15:51 GMT]]></title><description><![CDATA[<p>Ah, ich bin dir zu unpräzise <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
<p>Du liegst natürlich richtig; die Zahl der Dimensionen <em>ist</em> eine Größe. Die Frage ist aber eher, was size_t aussagt, und das ist meist:<br />
- Eine Anzahl von Bytes, etwa bei sizeof() und vielen C-Funktionen, oder<br />
- Eine Anzahl von Elementen einer Datenstruktur.</p>
<p>Schon diese beiden hätte man besser auseinandergehalten; ein besonders schönes Beispiel ist</p>
<pre><code class="language-cpp">size_t fread (void* ptr, size_t size, size_t count, FILE* stream);
</code></pre>
<p>. Was gibt <code>fread()</code> zurück: die Zahl der gelesenen Bytes, oder die Zahl der Elemente? Und welches der <code>size_t</code> -Argumente ist nun welches? Es wäre viel offensichtlicher, wenn die Funktion als</p>
<pre><code class="language-cpp">number_t fread (void* ptr, size_t size, number_t count, FILE* stream);
</code></pre>
<p>definiert wäre.</p>
<p>(Daß <code>size_t</code> eher mit einer Byte-Anzahl zu assoziieren ist, rechtfertige ich primär damit, daß das grundlegende Sprachelement <code>sizeof()</code> in <code>size_t</code> resultiert.)</p>
<p>Nun bedient sich, wie ich oben bereits erwähnte, die Standardbibliothek einer fragwürdigen Metapher, nämlich der des Vektors. Mit einem solchen hat eine Datenstruktur, die die <code>push_back()</code> -Semantik unterstützt und überhaupt eine variable Elementzahl hat, herzlich wenig zu tun. Gehen wir also davon aus, wir dürften die Datenstruktur <code>std::array&lt;&gt;</code> und die fragliche Funktion <code>count()</code> oder <code>length()</code> taufen - was gäbe sie zurück? Wenn es existierte, böte sich <code>number_t</code> an, doch der Standard definiert nur <code>size_t</code> , und aufgrund oben ausgeführter Ambiguität ist es dann durchaus legitim, für diesen Zweck stattdessen <code>int</code> oder <code>uint</code> zu verwenden wie in jeder anderen Sprache auch.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1728529</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1728529</guid><dc:creator><![CDATA[audacia]]></dc:creator><pubDate>Thu, 18 Jun 2009 00:15:51 GMT</pubDate></item><item><title><![CDATA[Reply to Unterschiedliche Typen obwohl eigentlich gleich? on Thu, 18 Jun 2009 08:25:05 GMT]]></title><description><![CDATA[<p>audacia schrieb:</p>
<blockquote>
<p>Nun bedient sich, wie ich oben bereits erwähnte, die Standardbibliothek einer fragwürdigen Metapher, nämlich der des Vektors.</p>
</blockquote>
<p>Und was soll daran fragwürdig sein? In der Informatik ist &quot;Vektor&quot; ein gängiger Begriff (und synonym) für n-Tupel.<br />
Außerdem sollte man besser <code>std::vector&lt;T&gt;::size_type</code> benutzen. Das ist zwar i.d.R. das Gleiche wie <code>size_t</code> , aber das muss nicht so sein.<br />
Und wenn der Typ keine Größe sondern was anderes ausdrücken soll, dann den den Typen nach dem was er sein soll. <code>unsigned int</code> ist auch nicht sonderlich sprechend.</p>
<pre><code class="language-cpp">typedef std::vector&lt;T&gt;::size_type TypeForSomethingThatDependsOnSizeButIsNotSize;
TypeForSomethingThatDependsOnSizeButIsNotSize something = vec.size();
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1728550</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1728550</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Thu, 18 Jun 2009 08:25:05 GMT</pubDate></item><item><title><![CDATA[Reply to Unterschiedliche Typen obwohl eigentlich gleich? on Thu, 18 Jun 2009 06:24:45 GMT]]></title><description><![CDATA[<p>unsigned int und size_t zu mischen, ist so ziemlich eine von den dümmsten Sachen, die man machen kann, wenn man will, dass ein Programm auch Fehlerfrei auf 64 Bit Maschinen läuft.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1728554</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1728554</guid><dc:creator><![CDATA[AmazingCoder]]></dc:creator><pubDate>Thu, 18 Jun 2009 06:24:45 GMT</pubDate></item></channel></rss>