<?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[std::min für unterschiedliche Typen]]></title><description><![CDATA[<p>Hallo Forum,</p>
<p>ich hätte eine recht technische Frage zu std::min, rein aus Interesse.</p>
<pre><code>unsigned char x = std::numeric_limits&lt;unsigned char&gt;::max();

// z sei irgendein gültiger unsigned char. Mir geht es um den im folgenden &quot;ungünstigen&quot; Maximalwert
unsigned char z = std::numeric_limits&lt;unsigned char&gt;::max();
</code></pre>
<p>Weil der zweite Parameter zu int wird, mag der Compiler natürlich folgendes nicht:</p>
<pre><code>unsigned char y = std::min(x, 1 + z);
</code></pre>
<p>Verständlicherweise liefern mir diese beiden Varianten nicht das gewünchste Ergebnis:</p>
<pre><code>y = std::min&lt;unsigned char&gt;(x, 1 + z); // y == 0
y = std::min(x, static_cast&lt;unsigned char&gt;(1 + z)); // y == 0
</code></pre>
<p>Als wirklich sichere und korrekte Variante fällt mir nur folgendes ein, aber &quot;hübsch&quot; finde ich das nicht.</p>
<pre><code>y = static_cast&lt;unsigned char&gt;(std::min(static_cast&lt;int&gt;(x), 1 + z)); // y == 255
</code></pre>
<p>Würdet ihr das trotzdem so schreiben?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/330518/std-min-für-unterschiedliche-typen</link><generator>RSS for Node</generator><lastBuildDate>Fri, 03 Jul 2026 06:12:04 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/330518.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 14 Jan 2015 10:28:24 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to std::min für unterschiedliche Typen on Wed, 14 Jan 2015 10:28:24 GMT]]></title><description><![CDATA[<p>Hallo Forum,</p>
<p>ich hätte eine recht technische Frage zu std::min, rein aus Interesse.</p>
<pre><code>unsigned char x = std::numeric_limits&lt;unsigned char&gt;::max();

// z sei irgendein gültiger unsigned char. Mir geht es um den im folgenden &quot;ungünstigen&quot; Maximalwert
unsigned char z = std::numeric_limits&lt;unsigned char&gt;::max();
</code></pre>
<p>Weil der zweite Parameter zu int wird, mag der Compiler natürlich folgendes nicht:</p>
<pre><code>unsigned char y = std::min(x, 1 + z);
</code></pre>
<p>Verständlicherweise liefern mir diese beiden Varianten nicht das gewünchste Ergebnis:</p>
<pre><code>y = std::min&lt;unsigned char&gt;(x, 1 + z); // y == 0
y = std::min(x, static_cast&lt;unsigned char&gt;(1 + z)); // y == 0
</code></pre>
<p>Als wirklich sichere und korrekte Variante fällt mir nur folgendes ein, aber &quot;hübsch&quot; finde ich das nicht.</p>
<pre><code>y = static_cast&lt;unsigned char&gt;(std::min(static_cast&lt;int&gt;(x), 1 + z)); // y == 255
</code></pre>
<p>Würdet ihr das trotzdem so schreiben?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2437483</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2437483</guid><dc:creator><![CDATA[MrMinimum]]></dc:creator><pubDate>Wed, 14 Jan 2015 10:28:24 GMT</pubDate></item><item><title><![CDATA[Reply to std::min für unterschiedliche Typen on Wed, 14 Jan 2015 10:57:12 GMT]]></title><description><![CDATA[<p>Ja, es ist schade, dass wir selbst mit C++14 immer noch kein funktionierendes min und max haben.<br />
wie wäre es mit</p>
<pre><code class="language-cpp">y = static_cast&lt;unsigned char&gt;(std::min(0 + x, 1 + z)); // y == 255
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2437485</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2437485</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Wed, 14 Jan 2015 10:57:12 GMT</pubDate></item><item><title><![CDATA[Reply to std::min für unterschiedliche Typen on Wed, 14 Jan 2015 11:00:28 GMT]]></title><description><![CDATA[<p>.. das ist sehr viel schwieriger als man denkt:<br />
siehe <a href="http://www.drdobbs.com/generic-min-and-max-redivivus/184403774" rel="nofollow">http://www.drdobbs.com/generic-min-and-max-redivivus/184403774</a> und die Links unter 'Bibliography'</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2437486</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2437486</guid><dc:creator><![CDATA[Kenner von C++]]></dc:creator><pubDate>Wed, 14 Jan 2015 11:00:28 GMT</pubDate></item><item><title><![CDATA[Reply to std::min für unterschiedliche Typen on Wed, 14 Jan 2015 11:04:03 GMT]]></title><description><![CDATA[<p>Kenner von C++ schrieb:</p>
<blockquote>
<p>.. das ist sehr viel schwieriger als man denkt:<br />
siehe <a href="http://www.drdobbs.com/generic-min-and-max-redivivus/184403774" rel="nofollow">http://www.drdobbs.com/generic-min-and-max-redivivus/184403774</a> und die Links unter 'Bibliography'</p>
</blockquote>
<p>jup, aber wir haben in C++14 die notwendigen Sprachmittel um etwas Brauchbares zusammenzubauen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2437488</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2437488</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Wed, 14 Jan 2015 11:04:03 GMT</pubDate></item><item><title><![CDATA[Reply to std::min für unterschiedliche Typen on Wed, 14 Jan 2015 11:27:00 GMT]]></title><description><![CDATA[<p>In C++14 schreibste sowas in drei Zeilen</p>
<pre><code>template &lt;typename L, typename R&gt;
decltype(auto) min(L&amp;&amp; l, R&amp;&amp; r)
{return std::forward&lt;L&gt;(l) &gt; std::forward&lt;R&gt;(r)? Std::forward&lt;R&gt;(r) : std::forward&lt;L&gt;(l);}
</code></pre>
<p>Wer SFINAE will nimmt common_type (ist doch jetzt endlich SFINAE friendly, oder? <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>Edit: decltype vergessen. Ist schliesslich auf meinem uralten Blackberry geschrieben <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2437489</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2437489</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Wed, 14 Jan 2015 11:27:00 GMT</pubDate></item><item><title><![CDATA[Reply to std::min für unterschiedliche Typen on Wed, 14 Jan 2015 12:03:57 GMT]]></title><description><![CDATA[<p>Vielen Dank für die Antworten und Vorschläge!<br />
Ein interessantes Thema...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2437500</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2437500</guid><dc:creator><![CDATA[MrMinimum]]></dc:creator><pubDate>Wed, 14 Jan 2015 12:03:57 GMT</pubDate></item></channel></rss>