<?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::numeric_limits bei Initialisierung globaler Variable benutzen]]></title><description><![CDATA[<p>Hallo,</p>
<p>ist es vom C++-Standard her safe, bei der Initialisierung einer globalen Variable die Klasse std::numeric_limits zu benutzen, d.h. zB</p>
<p>int global_val = std::numeric_limits&lt;int&gt;::max();</p>
<p>so im Code zu schreiben (als globale Variable). Meine GCC-Implementierung gibt hier einfach das Makro __DBL_MAX__ zurück, was ja zur Compile-Zeit ersetzt wird und daher safe ist. Nun frage ich mich, ob das implementierungsunabhängig immer korrekt ist. Schließlich kann ich mich im Allgemeinen ja nicht darauf verlassen, dass statische Funktionen einer Klasse schon sinnvolle Werte zurückgeben, wenn meine globale Variable initialisiert wird (weil sie zB auf andere globale Variablen zugreifen könnten, die noch nicht initialisiert sind). Kann man im speziellen Fall von numeric_limits doch davon ausgehen (aus irgendeinem Grund) oder ist obiger Code nicht standard-konform?</p>
<p>MfG plizz</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/319892/std-numeric_limits-bei-initialisierung-globaler-variable-benutzen</link><generator>RSS for Node</generator><lastBuildDate>Fri, 24 Jul 2026 09:43:50 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/319892.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 07 Sep 2013 12:52:13 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to std::numeric_limits bei Initialisierung globaler Variable benutzen on Sat, 07 Sep 2013 12:52:13 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ist es vom C++-Standard her safe, bei der Initialisierung einer globalen Variable die Klasse std::numeric_limits zu benutzen, d.h. zB</p>
<p>int global_val = std::numeric_limits&lt;int&gt;::max();</p>
<p>so im Code zu schreiben (als globale Variable). Meine GCC-Implementierung gibt hier einfach das Makro __DBL_MAX__ zurück, was ja zur Compile-Zeit ersetzt wird und daher safe ist. Nun frage ich mich, ob das implementierungsunabhängig immer korrekt ist. Schließlich kann ich mich im Allgemeinen ja nicht darauf verlassen, dass statische Funktionen einer Klasse schon sinnvolle Werte zurückgeben, wenn meine globale Variable initialisiert wird (weil sie zB auf andere globale Variablen zugreifen könnten, die noch nicht initialisiert sind). Kann man im speziellen Fall von numeric_limits doch davon ausgehen (aus irgendeinem Grund) oder ist obiger Code nicht standard-konform?</p>
<p>MfG plizz</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2350905</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2350905</guid><dc:creator><![CDATA[plizzz]]></dc:creator><pubDate>Sat, 07 Sep 2013 12:52:13 GMT</pubDate></item><item><title><![CDATA[Reply to std::numeric_limits bei Initialisierung globaler Variable benutzen on Sat, 07 Sep 2013 12:55:34 GMT]]></title><description><![CDATA[<p>[lib.limits]/3 schrieb:</p>
<blockquote>
<p>For all members declared static const in the numeric_limits template, specializations shall define these values in such a way that they are usable as integral constant expressions.</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/2350907</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2350907</guid><dc:creator><![CDATA[deefi]]></dc:creator><pubDate>Sat, 07 Sep 2013 12:55:34 GMT</pubDate></item><item><title><![CDATA[Reply to std::numeric_limits bei Initialisierung globaler Variable benutzen on Sat, 07 Sep 2013 13:00:26 GMT]]></title><description><![CDATA[<p>Sorry, war zu schnell. max() ist nicht static const. Sieht so aus, als wäre das in C++03 nicht erlaubt, erst in C++11 (dann ist max constexpr).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2350908</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2350908</guid><dc:creator><![CDATA[deefi]]></dc:creator><pubDate>Sat, 07 Sep 2013 13:00:26 GMT</pubDate></item><item><title><![CDATA[Reply to std::numeric_limits bei Initialisierung globaler Variable benutzen on Sat, 07 Sep 2013 13:00:57 GMT]]></title><description><![CDATA[<p>Oder seit C++11 auch damit erklärbar, dass die Funktionen <code>constexpr</code> sind. Das spricht für sich.</p>
<p>Edit: Zu langsam...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2350909</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2350909</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Sat, 07 Sep 2013 13:00:57 GMT</pubDate></item><item><title><![CDATA[Reply to std::numeric_limits bei Initialisierung globaler Variable benutzen on Sun, 08 Sep 2013 10:09:13 GMT]]></title><description><![CDATA[<p>Ok, da ich hier noch mit C++03 arbeite, scheint es also keine Garantie zu geben, dass das funktioniert. Vielen Dank.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2351084</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2351084</guid><dc:creator><![CDATA[plizzz]]></dc:creator><pubDate>Sun, 08 Sep 2013 10:09:13 GMT</pubDate></item><item><title><![CDATA[Reply to std::numeric_limits bei Initialisierung globaler Variable benutzen on Sun, 08 Sep 2013 11:12:48 GMT]]></title><description><![CDATA[<blockquote>
<p>dass statische Funktionen einer Klasse schon sinnvolle Werte zurückgeben, wenn meine globale Variable initialisiert wird</p>
</blockquote>
<p>Warum nicht, es sind Funktionen. Wenn du hier auf das Problem der Initialisierungsreihenfolge bei globalen Variablen ansprichst ... das ist der Grund, warum es Funktionen sind und nicht etwa nur Konstanten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2351097</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2351097</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Sun, 08 Sep 2013 11:12:48 GMT</pubDate></item><item><title><![CDATA[Reply to std::numeric_limits bei Initialisierung globaler Variable benutzen on Sun, 08 Sep 2013 11:38:28 GMT]]></title><description><![CDATA[<blockquote>
<p>Wenn du hier auf das Problem der Initialisierungsreihenfolge bei globalen Variablen ansprichst ... das ist der Grund, warum es Funktionen sind und nicht etwa nur Konstanten.</p>
</blockquote>
<p>Es gibt mit Konstanten (die mit bspw. Literalen initialisiert werden) hier kein Problem bei <em>constant initialization</em>.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2351105</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2351105</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Sun, 08 Sep 2013 11:38:28 GMT</pubDate></item><item><title><![CDATA[Reply to std::numeric_limits bei Initialisierung globaler Variable benutzen on Tue, 17 Sep 2013 10:24:32 GMT]]></title><description><![CDATA[<p>knivil schrieb:</p>
<blockquote>
<blockquote>
<p>dass statische Funktionen einer Klasse schon sinnvolle Werte zurückgeben, wenn meine globale Variable initialisiert wird</p>
</blockquote>
<p>Warum nicht, es sind Funktionen. Wenn du hier auf das Problem der Initialisierungsreihenfolge bei globalen Variablen ansprichst ... das ist der Grund, warum es Funktionen sind und nicht etwa nur Konstanten.</p>
</blockquote>
<p>Ich grabe das hier nochmal aus. Natürlich sind es Funktionen und die werden wohl auch richtig aufgerufen. Aber ich kann im Allgemeinen ja nicht davon ausgehen, dass diese Funktionen nicht auf irgendwelche anderen globalen Variablen zurückgreifen, die vielleicht zum Zeitpunkt des Funktionsaufruf noch nicht initialisiert sind. Falls hier irgendwelche Konstanten, die schon zur Compile-Zeit ersetzt werden, zurückgegeben werden, habe ich natürlich kein Problem. Aber das kann ich ja nicht wissen, ohne in die konkrete Implementierung der Funktion zu schauen, die ich aufrufe.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2353138</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2353138</guid><dc:creator><![CDATA[plizzz]]></dc:creator><pubDate>Tue, 17 Sep 2013 10:24:32 GMT</pubDate></item><item><title><![CDATA[Reply to std::numeric_limits bei Initialisierung globaler Variable benutzen on Tue, 17 Sep 2013 11:10:59 GMT]]></title><description><![CDATA[<p>sowohl in C++03 als auch in in C++11 gibt es alternativ &lt;climits&gt;</p>
<p><a href="http://en.cppreference.com/w/cpp/header/climits" rel="nofollow">http://en.cppreference.com/w/cpp/header/climits</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2353144</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2353144</guid><dc:creator><![CDATA[dd++ 0]]></dc:creator><pubDate>Tue, 17 Sep 2013 11:10:59 GMT</pubDate></item><item><title><![CDATA[Reply to std::numeric_limits bei Initialisierung globaler Variable benutzen on Tue, 17 Sep 2013 13:40:16 GMT]]></title><description><![CDATA[<blockquote>
<p>Aber ich kann im Allgemeinen ja nicht davon ausgehen, dass diese Funktionen nicht auf irgendwelche anderen globalen Variablen zurückgreifen</p>
</blockquote>
<p>Doch, kannst du, weil es sonst keinen Sinn mancht sie in Funktionen zu verpacken. Wenn andere globale Variablen benoetigt warden, dann sind sie auch in einem Funktionsaufruf verpackt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2353145</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2353145</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Tue, 17 Sep 2013 13:40:16 GMT</pubDate></item><item><title><![CDATA[Reply to std::numeric_limits bei Initialisierung globaler Variable benutzen on Tue, 17 Sep 2013 11:27:49 GMT]]></title><description><![CDATA[<p>dd++ schrieb:</p>
<blockquote>
<p>sowohl in C++03 als auch in in C++11 gibt es alternativ &lt;climits&gt;</p>
<p><a href="http://en.cppreference.com/w/cpp/header/climits" rel="nofollow">http://en.cppreference.com/w/cpp/header/climits</a></p>
</blockquote>
<p>Wobei man sich schon in C++03 mit den Konstanten zurückhalten und sie in C++11 gar nicht mehr verwenden sollte.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2353149</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2353149</guid><dc:creator><![CDATA[Marthog]]></dc:creator><pubDate>Tue, 17 Sep 2013 11:27:49 GMT</pubDate></item><item><title><![CDATA[Reply to std::numeric_limits bei Initialisierung globaler Variable benutzen on Wed, 18 Sep 2013 07:21:56 GMT]]></title><description><![CDATA[<p>Marthog schrieb:</p>
<blockquote>
<p>Wobei man sich schon in C++03 mit den Konstanten zurückhalten und sie in C++11 gar nicht mehr verwenden sollte.</p>
</blockquote>
<p>Wieso? Die &quot;C++-Variante&quot; ist viel schreibaufwändiger und hat in Nicht-template-Code keinerlei Vorteile, sondern lenkt im Gegenteil vom Wesentlichen ab.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2353300</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2353300</guid><dc:creator><![CDATA[das limit]]></dc:creator><pubDate>Wed, 18 Sep 2013 07:21:56 GMT</pubDate></item><item><title><![CDATA[Reply to std::numeric_limits bei Initialisierung globaler Variable benutzen on Wed, 18 Sep 2013 10:57:54 GMT]]></title><description><![CDATA[<p>das limit schrieb:</p>
<blockquote>
<p>Die &quot;C++-Variante&quot; ist viel schreibaufwändiger und hat in Nicht-template-Code keinerlei Vorteile, sondern lenkt im Gegenteil vom Wesentlichen ab.</p>
</blockquote>
<p>Das sehe ich nicht so. Sie ist zwar länger, das heißt aber nicht dass sie schlechter ist.</p>
<p>Vorteile:<br />
- Verwendbar bei templates oder mit decltype -&gt; einheitlich<br />
- Es ist übersichtlich, welchen Sinn der Wert hat, so ist z.B. bei</p>
<pre><code>std::numeric_limits&lt;unsigned int&gt;::min()
</code></pre>
<p>klar, dass man den kleinsten Wert von unsigned int will, würde man nur 0 hinschreiben, wäre das nicht so klar.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2353373</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2353373</guid><dc:creator><![CDATA[Marthog]]></dc:creator><pubDate>Wed, 18 Sep 2013 10:57:54 GMT</pubDate></item><item><title><![CDATA[Reply to std::numeric_limits bei Initialisierung globaler Variable benutzen on Wed, 18 Sep 2013 11:03:13 GMT]]></title><description><![CDATA[<blockquote>
<p>Verwendbar bei templates oder mit decltype -&gt; einheitlich</p>
</blockquote>
<p>Beides keine Vorteile. Makros sind Text-Wergzeuge. Am Ende steht da nur ein Literal des entsprechenden Typs, das funktioniert auch wunderbar mit <code>decltype</code> &amp; co.</p>
<blockquote>
<p>dass man den kleinsten Wert von unsigned int will</p>
</blockquote>
<p>Ist auch beim Makro <code>INT_MIN</code> klar.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2353386</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2353386</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Wed, 18 Sep 2013 11:03:13 GMT</pubDate></item><item><title><![CDATA[Reply to std::numeric_limits bei Initialisierung globaler Variable benutzen on Wed, 18 Sep 2013 11:23:48 GMT]]></title><description><![CDATA[<p>Marthog schrieb:</p>
<blockquote>
<p>Sie ist zwar länger, das heißt aber nicht dass sie schlechter ist.</p>
</blockquote>
<p>Vorteil ist auch, dass die Typen 1:1 geschrieben werden. Also nicht etwa <code>SHRT</code> für <code>short</code> .</p>
<p>Sone schrieb:</p>
<blockquote>
<p>Ist auch beim Makro <code>INT_MIN</code> klar.</p>
</blockquote>
<p>Es geht um <code>unsigned int</code> .</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2353395</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2353395</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Wed, 18 Sep 2013 11:23:48 GMT</pubDate></item><item><title><![CDATA[Reply to std::numeric_limits bei Initialisierung globaler Variable benutzen on Wed, 18 Sep 2013 11:27:57 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Marthog schrieb:</p>
<blockquote>
<p>Sie ist zwar länger, das heißt aber nicht dass sie schlechter ist.</p>
</blockquote>
<p>Vorteil ist auch, dass die Typen 1:1 geschrieben werden. Also nicht etwa <code>SHRT</code> für <code>short</code> .</p>
</blockquote>
<p>Ich finde die Schreibweise von <code>numeric_limits</code> natürlich auch besser. Weil der Typ da so schön steht, als Template-Argument.</p>
<p>Nexus schrieb:</p>
<blockquote>
<p>Sone schrieb:</p>
<blockquote>
<p>Ist auch beim Makro <code>INT_MIN</code> klar.</p>
</blockquote>
<p>Es geht um <code>unsigned int</code> .</p>
</blockquote>
<p>Dann schreibt man eben 0 hin und macht ein Kommentar.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2353396</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2353396</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Wed, 18 Sep 2013 11:27:57 GMT</pubDate></item><item><title><![CDATA[Reply to std::numeric_limits bei Initialisierung globaler Variable benutzen on Wed, 18 Sep 2013 11:51:17 GMT]]></title><description><![CDATA[<p>Sone schrieb:</p>
<blockquote>
<p>Weil der Typ da so schön steht, als Template-Argument.</p>
</blockquote>
<p>Der ist allerdings redundant, wenn er schon bei der Deklaration der Variablen angebene wurde.</p>
<p>Also</p>
<pre><code class="language-cpp">int foo = std::numeric_limits&lt;decltype(foo)&gt;::max(); // oder
auto bar = std::numeric_limits&lt;int&gt;::max();
</code></pre>
<p>Ganz nebenbei erfordert das die Verwendung einer vernünftigen Initialisierungssyntax :p</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2353405</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2353405</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Wed, 18 Sep 2013 11:51:17 GMT</pubDate></item><item><title><![CDATA[Reply to std::numeric_limits bei Initialisierung globaler Variable benutzen on Wed, 18 Sep 2013 12:08:33 GMT]]></title><description><![CDATA[<p>camper schrieb:</p>
<blockquote>
<p>:p</p>
</blockquote>
<p>Seit wann benutzt du solch' vulgäre Smileys? <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>
<blockquote>
<p>Der ist allerdings redundant, wenn er schon bei der Deklaration der Variablen angebene wurde.</p>
</blockquote>
<p>Darum geht es mir gar nicht, nur die Schreibweise an sich finde ich schön.</p>
<p>Und natürlich hast du Recht - man sollte versuchen, eine entsprechende, möglichst wenig redundante Initialisierungssyntax zu verwenden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2353411</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2353411</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Wed, 18 Sep 2013 12:08:33 GMT</pubDate></item></channel></rss>