<?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[Standardkonform: Statische Variable durch statische Funktion initialisieren?!]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich hab eine sehr kurze Frage, die eigentlich schon im Titel steht.</p>
<p>Ist sowas hier standardkonform:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

namespace TestNS
{
    static int getLength() { return 5; }
    static int offset = getLength();
}

int main()
{
    std::cout &lt;&lt; TestNS::offset &lt;&lt; std::endl;
    return 0;
}
</code></pre>
<p>Wenn ich mit gcc Version 3.4.6. kompiliere (g++ -Wall -ansi test.cpp), bekomm ich nicht mal ein Warning. Trotzdem frage ich mich, darf man das laut Standard?</p>
<p>Schonmal vielen Dank im Voraus!</p>
<p>UPDATE:<br />
Hab das ganze auch mal mit gcc Version 4.1.2. probiert, ohne Probleme...</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/235224/standardkonform-statische-variable-durch-statische-funktion-initialisieren</link><generator>RSS for Node</generator><lastBuildDate>Thu, 24 Sep 2026 04:27:57 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/235224.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 27 Feb 2009 08:31:03 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Standardkonform: Statische Variable durch statische Funktion initialisieren?! on Fri, 27 Feb 2009 08:35:21 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich hab eine sehr kurze Frage, die eigentlich schon im Titel steht.</p>
<p>Ist sowas hier standardkonform:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

namespace TestNS
{
    static int getLength() { return 5; }
    static int offset = getLength();
}

int main()
{
    std::cout &lt;&lt; TestNS::offset &lt;&lt; std::endl;
    return 0;
}
</code></pre>
<p>Wenn ich mit gcc Version 3.4.6. kompiliere (g++ -Wall -ansi test.cpp), bekomm ich nicht mal ein Warning. Trotzdem frage ich mich, darf man das laut Standard?</p>
<p>Schonmal vielen Dank im Voraus!</p>
<p>UPDATE:<br />
Hab das ganze auch mal mit gcc Version 4.1.2. probiert, ohne Probleme...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1671079</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1671079</guid><dc:creator><![CDATA[Tobias W]]></dc:creator><pubDate>Fri, 27 Feb 2009 08:35:21 GMT</pubDate></item><item><title><![CDATA[Reply to Standardkonform: Statische Variable durch statische Funktion initialisieren?! on Fri, 27 Feb 2009 09:20:03 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>ich wüsste nicht, was dagegen spräche.<br />
Die Funktion ist bereits zur Compilezeit definiert und das liegt weit genug vor dem Programmstart. <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="😉"
    /></p>
<p>Undefiniert wird es IIRC erst, wenn der Rückgabewert seinerseits wieder abhängig ist von einer andere statischen Variable...</p>
<pre><code class="language-cpp">static int val = 3;
int getLength() { return val; }
static int offset = getLength();
</code></pre>
<p>(Ich denke nicht, dass es in C++ noch gebräuchlich ist, eine Funktion static zu deklarieren)</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1671095</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1671095</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Fri, 27 Feb 2009 09:20:03 GMT</pubDate></item><item><title><![CDATA[Reply to Standardkonform: Statische Variable durch statische Funktion initialisieren?! on Fri, 27 Feb 2009 09:22:28 GMT]]></title><description><![CDATA[<p>Der BCC übersetzt es auch bedenkenlos. Wie Simon2 sagt: es spricht eigentlich nichts dagegen.</p>
<p>Simon2 schrieb:</p>
<blockquote>
<p>(Ich denke nicht, dass es in C++ noch gebräuchlich ist, eine Funktion static zu deklarieren)</p>
</blockquote>
<p>?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1671099</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1671099</guid><dc:creator><![CDATA[audacia]]></dc:creator><pubDate>Fri, 27 Feb 2009 09:22:28 GMT</pubDate></item><item><title><![CDATA[Reply to Standardkonform: Statische Variable durch statische Funktion initialisieren?! on Fri, 27 Feb 2009 09:45:42 GMT]]></title><description><![CDATA[<p>audacia schrieb:</p>
<blockquote>
<p>Simon2 schrieb:</p>
<blockquote>
<p>(Ich denke nicht, dass es in C++ noch gebräuchlich ist, eine Funktion static zu deklarieren)</p>
</blockquote>
<p>?</p>
</blockquote>
<p>In C++ nimmt man für Funktionen die im Scope der Übersetzungseinheit liegen sollten eher anonyme Namensräume.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1671114</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1671114</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Fri, 27 Feb 2009 09:45:42 GMT</pubDate></item><item><title><![CDATA[Reply to Standardkonform: Statische Variable durch statische Funktion initialisieren?! on Fri, 27 Feb 2009 10:21:37 GMT]]></title><description><![CDATA[<p>Erstmal vielen Dank für die Infos!</p>
<p>Und zum Sinn und Unsinn dieser Vorgehensweise: ich hab hier ne Bibliothek die erweitert werden will. Und in dieser gibt es nunmal solche Funktionen. Ich hab mich nur gefragt, ob das eben Probleme machen könnte...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1671136</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1671136</guid><dc:creator><![CDATA[Tobias W]]></dc:creator><pubDate>Fri, 27 Feb 2009 10:21:37 GMT</pubDate></item><item><title><![CDATA[Reply to Standardkonform: Statische Variable durch statische Funktion initialisieren?! on Tue, 03 Mar 2009 07:17:58 GMT]]></title><description><![CDATA[<p>Ich habe eine weitere Frage, die genau in die selbe Kerbe schlägt (nur diesmal mit einem const):</p>
<p>Warum funktioniert folgendes:</p>
<pre><code class="language-cpp">namespace Test
{
    size_t getLength() { return 5; }
    namespace Muh
    {
        static const size_t length = getLength();
    };
}
</code></pre>
<p>während das nächste wieder nicht geht (man beachte das struct):</p>
<pre><code class="language-cpp">namespace Test
{
    size_t getLength() { return 5; }
    struct Muh
    {
        static const size_t length = getLength();
    };
}
</code></pre>
<p>Ich selber kann nur vermuten: da das struct ein Objekt ist, müsste ich die Konstante über einen Initialisierer am Konstruktor vorbelegen. So eine Direktzuweisung, funktioniert wohl nur mit Literalen. Aber der Compiler könnte das doch prinzipiell schaffen, oder?</p>
<p>Gruß,<br />
Tobi</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1673238</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1673238</guid><dc:creator><![CDATA[Tobias W]]></dc:creator><pubDate>Tue, 03 Mar 2009 07:17:58 GMT</pubDate></item><item><title><![CDATA[Reply to Standardkonform: Statische Variable durch statische Funktion initialisieren?! on Tue, 03 Mar 2009 08:22:00 GMT]]></title><description><![CDATA[<p>In einem Struct kannst du eine Variable nicht vor definieren und nur deklarieren. Also musst du, wie du angedeutet hast, es mit einem Konstruktor lösen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1673259</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1673259</guid><dc:creator><![CDATA[freaky]]></dc:creator><pubDate>Tue, 03 Mar 2009 08:22:00 GMT</pubDate></item><item><title><![CDATA[Reply to Standardkonform: Statische Variable durch statische Funktion initialisieren?! on Tue, 03 Mar 2009 21:38:04 GMT]]></title><description><![CDATA[<p>FreakY&lt;3Cpp schrieb:</p>
<blockquote>
<p>In einem Struct kannst du eine Variable nicht vor definieren und nur deklarieren. Also musst du, wie du angedeutet hast, es mit einem Konstruktor lösen.</p>
</blockquote>
<p>Statische Variablen im Konstruktor? Sicher...</p>
<p>Das Problem besteht darin, dass <code>static const</code> -Variablen, die in Klassen bei ihrer Deklaration initialisiert werden, mit einem konstanten Ausdruck initialisiert werden müssen. Ansonsten kannst du die Definition nachträglich (zur Laufzeit - bei Programmstart, wo die globalen/statischen Variablen erstellt werden) vornehmen.</p>
<p>Das ginge dann so:</p>
<pre><code class="language-cpp">namespace Test 
{ 
    size_t getLength() { return 5; } 
    struct Muh 
    { 
        static const size_t length; 
    };

    const size_t Muh::length = getLength();
}
</code></pre>
<p>P.S. Im neuen C++-Standard wird das Schlüsselwort <code>constexpr</code> Rückgabewerte von auf diese Weise deklarierten Funktionen als konstante Ausdrücke ermöglichen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1673734</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1673734</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Tue, 03 Mar 2009 21:38:04 GMT</pubDate></item></channel></rss>