<?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[konstante Klassen definieren.]]></title><description><![CDATA[<p>Folgendes Problem: Ich habe eine Klasse T und lege in einem Header spezielle Instanzen von T an:</p>
<pre><code class="language-cpp">const T A(1);
const T B(2);
</code></pre>
<p>Aber das geht doch schief, wenn mein Header in verschiedenen .cpp-Files verwendet wird, oder? (Doppelte Instanzierung)</p>
<p>Wie kann ich das retten, ohne auf extern zurückgreifen zu müssen (meine Klasse T ist ein lightweight-Wrappe um ein int, und soll komplett wegoptimiert werden)?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/297076/konstante-klassen-definieren</link><generator>RSS for Node</generator><lastBuildDate>Fri, 14 Aug 2026 16:15:55 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/297076.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 18 Dec 2011 19:26:56 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to konstante Klassen definieren. on Sun, 18 Dec 2011 19:26:56 GMT]]></title><description><![CDATA[<p>Folgendes Problem: Ich habe eine Klasse T und lege in einem Header spezielle Instanzen von T an:</p>
<pre><code class="language-cpp">const T A(1);
const T B(2);
</code></pre>
<p>Aber das geht doch schief, wenn mein Header in verschiedenen .cpp-Files verwendet wird, oder? (Doppelte Instanzierung)</p>
<p>Wie kann ich das retten, ohne auf extern zurückgreifen zu müssen (meine Klasse T ist ein lightweight-Wrappe um ein int, und soll komplett wegoptimiert werden)?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2158507</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2158507</guid><dc:creator><![CDATA[ujhhkjh]]></dc:creator><pubDate>Sun, 18 Dec 2011 19:26:56 GMT</pubDate></item><item><title><![CDATA[Reply to konstante Klassen definieren. on Sun, 18 Dec 2011 20:04:55 GMT]]></title><description><![CDATA[<p>Das verletzt dann die ODR, korrekt.</p>
<p>Ob extern oder nicht sollte keine Auswirkung darauf haben ob mehr oder weniger wegoptimiert wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2158526</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2158526</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Sun, 18 Dec 2011 20:04:55 GMT</pubDate></item><item><title><![CDATA[Reply to konstante Klassen definieren. on Sun, 18 Dec 2011 20:09:41 GMT]]></title><description><![CDATA[<p>const impliziert internal linkage, solange du die Objekte nicht explizit extern machst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2158529</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2158529</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Sun, 18 Dec 2011 20:09:41 GMT</pubDate></item><item><title><![CDATA[Reply to konstante Klassen definieren. on Sun, 18 Dec 2011 20:10:37 GMT]]></title><description><![CDATA[<p>camper schrieb:</p>
<blockquote>
<p>const impliziert internal linkage</p>
</blockquote>
<p>Das heißt auf gut Deutsch?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2158530</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2158530</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Sun, 18 Dec 2011 20:10:37 GMT</pubDate></item><item><title><![CDATA[Reply to konstante Klassen definieren. on Sun, 18 Dec 2011 20:44:36 GMT]]></title><description><![CDATA[<p>Unter der Annahme, dass die Konstanten sowieso in jeder Datei wegoptimiert werden, kannst du sie static const machen oder äquivalent dazu in einen anonymen namespace packen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2158540</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2158540</guid><dc:creator><![CDATA[wxSkip]]></dc:creator><pubDate>Sun, 18 Dec 2011 20:44:36 GMT</pubDate></item><item><title><![CDATA[Reply to konstante Klassen definieren. on Sun, 18 Dec 2011 21:54:54 GMT]]></title><description><![CDATA[<p>Weil mir der Titel ins Auge gesprungen ist: Es geht hier um konstante <em>Objekte</em>. Klassen != Objekte.</p>
<p>ujhhkjh schrieb:</p>
<blockquote>
<p>Folgendes Problem: Ich habe eine Klasse T und lege in einem Header spezielle Instanzen von T an:</p>
<pre><code class="language-cpp">const T A(1);
const T B(2);
</code></pre>
<p>Aber das geht doch schief, wenn mein Header in verschiedenen .cpp-Files verwendet wird, oder? (Doppelte Instanzierung)</p>
<p>Wie kann ich das retten, ohne auf extern zurückgreifen zu müssen (meine Klasse T ist ein lightweight-Wrappe um ein int, und soll komplett wegoptimiert werden)?</p>
</blockquote>
<p>Top-Level const impliziert in C++ eine interne Bindung. Es geht also <em>nicht</em> schief, wenn Du diesen Header in mehreren ÜEs einbindest. Allerdings hast du dann pro solcher ÜE zwei eigene Objekte.</p>
<p>(ÜE = Übersetzungseinheit)</p>
<p>Wenn Du das nicht willst, ist der Standardweg der, de Objekte per extern zu deklarieren und sie in einer eigenen ÜE (soundso.cpp) zu definieren. Wenn es unbeding sein muss, dass das alles in einem Header passieren soll, kann man es auch über eine inline-Funktion regeln:</p>
<pre><code class="language-cpp">inline T const&amp; a() {
  static const T meina (1);
  return meina;
}
</code></pre>
<p>Hier ist garantiert, dass die Funktion von jeder ÜE aus eine Referenz auf dasselbe Objekt zurückgibt. (Das liegt an inline+static)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2158552</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2158552</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Sun, 18 Dec 2011 21:54:54 GMT</pubDate></item><item><title><![CDATA[Reply to konstante Klassen definieren. on Sun, 18 Dec 2011 21:58:42 GMT]]></title><description><![CDATA[<p>314159265358979 schrieb:</p>
<blockquote>
<p>camper schrieb:</p>
<blockquote>
<p>const impliziert internal linkage</p>
</blockquote>
<p>Das heißt auf gut Deutsch?</p>
</blockquote>
<p>Kurzversion:</p>
<pre><code class="language-cpp">const int foo = 23; // in C++
</code></pre>
<p>ist äquivalent zu</p>
<pre><code class="language-cpp">static const int foo = 23; // in C
</code></pre>
<p>(davon abgesehen, dass in C foo kein konstanter Ausdruck ist, aber es geht hier ja um die Bindung)</p>
<p>top-level const im globalen Scope / auf Namensraumebene impliziert interne Bindung -- es sei denn, das Schlüsselwort extern wird verwendet.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2158555</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2158555</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Sun, 18 Dec 2011 21:58:42 GMT</pubDate></item></channel></rss>