<?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[Klassenvariablen &#x2F; kosntante Objekte]]></title><description><![CDATA[<p>huhu ihrs,</p>
<p>hab mal 2 Fragen:</p>
<p>1. Ist eigentlich nur für konstante Klassenvariablen der Wert zur Compiletime bekannt, und der Wert für jegliche anderen Attribute ist erst zur Laufzeit bekannt?</p>
<p>2. Sind die Attributewerte von konstanten Objekten zur Compiletime bekannt<br />
oder zur Laufzeit?</p>
<p>danke schonmal für Antworten <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/257752/klassenvariablen-kosntante-objekte</link><generator>RSS for Node</generator><lastBuildDate>Wed, 09 Sep 2026 23:17:25 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/257752.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 02 Jan 2010 22:15:50 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Klassenvariablen &#x2F; kosntante Objekte on Sat, 02 Jan 2010 22:24:31 GMT]]></title><description><![CDATA[<p>huhu ihrs,</p>
<p>hab mal 2 Fragen:</p>
<p>1. Ist eigentlich nur für konstante Klassenvariablen der Wert zur Compiletime bekannt, und der Wert für jegliche anderen Attribute ist erst zur Laufzeit bekannt?</p>
<p>2. Sind die Attributewerte von konstanten Objekten zur Compiletime bekannt<br />
oder zur Laufzeit?</p>
<p>danke schonmal für Antworten <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1831153</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1831153</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sat, 02 Jan 2010 22:24:31 GMT</pubDate></item><item><title><![CDATA[Reply to Klassenvariablen &#x2F; kosntante Objekte on Sat, 02 Jan 2010 22:26:42 GMT]]></title><description><![CDATA[<p>Zur Compilezeit bekannt sind – als Member von Klassen – lediglich statische integrale Konstanten, die mit einem konstanten Ausdruck innerhalb der Klassendefinition initialisiert werden.</p>
<pre><code class="language-cpp">struct t
{
    static const short value = 257;
};
</code></pre>
<p>Ein konstanter Ausdruck ist dabei ein Ausdruck, dessen Ergebnis schon zur Compilezeit bekannt ist. Darunter fallen beispielsweise Literale, Enumeratoren, Konstanten, die ihrerseits mit einem konstanten Ausdruck initialisiert wurden, Template-Zahl-Parameter, Resultate von <code>sizeof</code> und natürlich arithmetische Ausdrücke, welche bereits zur Kompilierzeit berechnet werden können.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1831161</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1831161</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sat, 02 Jan 2010 22:26:42 GMT</pubDate></item><item><title><![CDATA[Reply to Klassenvariablen &#x2F; kosntante Objekte on Sat, 02 Jan 2010 22:45:02 GMT]]></title><description><![CDATA[<p>okay</p>
<pre><code class="language-cpp">class Foo
{
    private:
        static const int size;
};

const int Foo::size = 10;
</code></pre>
<p>Also ist hierbei die &quot;10&quot; erst zur Laufzeit bekannt ... ok...</p>
<p>Nexus schrieb:</p>
<blockquote>
<pre><code class="language-cpp">struct t
{
    static const short value = 257;
};
</code></pre>
</blockquote>
<p>Dies funktioniert aber nur mit primitiven Datentypen, oder?</p>
<p>Und wie ist es hierbei:</p>
<pre><code class="language-cpp">class Foo
{
    private:
        int i;

    public:
        Foo() : i(7) {}
};

int main()
{    
    const Foo f;
    return 0;
};
</code></pre>
<p>ist &quot; i &quot; nun auch zur Compiletime bekannt?<br />
Oder sagt das const bei Objekten einfach nur aus,<br />
dass man die Attribute nicht verändern darf ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1831171</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1831171</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sat, 02 Jan 2010 22:45:02 GMT</pubDate></item><item><title><![CDATA[Reply to Klassenvariablen &#x2F; kosntante Objekte on Sat, 02 Jan 2010 22:56:41 GMT]]></title><description><![CDATA[<p>Dweb schrieb:</p>
<blockquote>
<p>Nexus schrieb:</p>
<blockquote>
<pre><code class="language-cpp">struct t
{
    static const short value = 257;
};
</code></pre>
</blockquote>
<p>Dies funktioniert aber nur mit primitiven Datentypen, oder?</p>
</blockquote>
<p>Ja, nur mit integralen statischen Konstanten.</p>
<p>Dweb schrieb:</p>
<blockquote>
<p>Und wie ist es hierbei:</p>
<pre><code class="language-cpp">class Foo
{
    private:
        int i;
        
    public:
        Foo() : i(7) {}
};

int main()
{    
    const Foo f;
    return 0;
};
</code></pre>
<p>ist &quot; i &quot; nun auch zur Compiletime bekannt?</p>
</blockquote>
<p>Nein, nicht-statische Member von Klassen können nie als konstante Ausdrücke verwendet werden. Zur Compilezeit ist der Wert natürlich trotzdem bekannt, aber der Programmierer kann damit nichts anfangen. Der Compiler darf jedoch aus diesem Umstand Nutzen ziehen und optimieren. Wie weit das möglich ist, hängt wohl von der Implementierung ab.</p>
<p>Dweb schrieb:</p>
<blockquote>
<p>Oder sagt das const bei Objekten einfach nur aus,<br />
dass man die Attribute nicht verändern darf ?</p>
</blockquote>
<p>Ja, grundsätzlich schon. In C++0x wird es das Schlüsselwort <code>constexpr</code> geben, das genau dafür da ist, konstante Ausdrücke explizit kennzuzeichnen. Dann können zum Beispiel auch Rückgabewerte von Funktionen in diesem Zusammenhang verwendet werden.</p>
<p>Momentan sorgt jedoch <code>const</code> dafür, dass Variablen zur Kompilierzeit ausgewertet werden können.</p>
<pre><code class="language-cpp">int main()
{
    const int expr = 42;

    double array[expr]; // OK, da expr konstanter Ausdruck
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1831180</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1831180</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sat, 02 Jan 2010 22:56:41 GMT</pubDate></item></channel></rss>