<?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[const]]></title><description><![CDATA[<p>Ich habe einen const vector&lt;T&gt; V; und will den in einen Header packen, damit Funktionen, die V verwenden, unter Zuhilfenahme der Elemente von V optimieren können.</p>
<p>Kann das Probleme geben, wenn dadurch V in mehreren .cpp-Files definiert wird? Und wie ggf. kann ich das Problem lösen?</p>
<p>Danke.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/319065/const</link><generator>RSS for Node</generator><lastBuildDate>Sun, 26 Jul 2026 07:33:34 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/319065.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 05 Aug 2013 16:30:14 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to const on Mon, 05 Aug 2013 16:30:14 GMT]]></title><description><![CDATA[<p>Ich habe einen const vector&lt;T&gt; V; und will den in einen Header packen, damit Funktionen, die V verwenden, unter Zuhilfenahme der Elemente von V optimieren können.</p>
<p>Kann das Probleme geben, wenn dadurch V in mehreren .cpp-Files definiert wird? Und wie ggf. kann ich das Problem lösen?</p>
<p>Danke.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2343635</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2343635</guid><dc:creator><![CDATA[c+++++++++]]></dc:creator><pubDate>Mon, 05 Aug 2013 16:30:14 GMT</pubDate></item><item><title><![CDATA[Reply to const on Mon, 05 Aug 2013 16:34:24 GMT]]></title><description><![CDATA[<p>Warum den Vektor öffentlich machen?</p>
<pre><code class="language-cpp">// header
T const&amp; v_get_at(size_t index);

// cpp
namespace { vector&lt;T&gt; V; }
T const&amp; v_get_at(size_t index) { return V[index]; }
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2343638</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2343638</guid><dc:creator><![CDATA[static]]></dc:creator><pubDate>Mon, 05 Aug 2013 16:34:24 GMT</pubDate></item><item><title><![CDATA[Reply to const on Mon, 05 Aug 2013 16:40:17 GMT]]></title><description><![CDATA[<pre><code>vector&lt;int&gt; V {1,2,3,4,5};

if (find(V.begin(),V.end(), 3))
  // do something
</code></pre>
<p>Das kann wegoptimiert werden, wenn V öffentlich ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2343643</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2343643</guid><dc:creator><![CDATA[c+++++++++]]></dc:creator><pubDate>Mon, 05 Aug 2013 16:40:17 GMT</pubDate></item><item><title><![CDATA[Reply to const on Mon, 05 Aug 2013 16:48:46 GMT]]></title><description><![CDATA[<p>c+++++++++ schrieb:</p>
<blockquote>
<p>Das kann wegoptimiert werden, wenn V öffentlich ist.</p>
</blockquote>
<p>Kennst du LTO? Bitte erst solche Optimierungsaussagen überprüfen und nicht aus dem Bauch das Design verschlechtern.</p>
<p>Wenn du drauf bestehst, die Syntax ist:</p>
<pre><code class="language-cpp">extern vector&lt;int&gt; V; // im header

vector&lt;int&gt; V; // im cpp
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2343653</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2343653</guid><dc:creator><![CDATA[static]]></dc:creator><pubDate>Mon, 05 Aug 2013 16:48:46 GMT</pubDate></item><item><title><![CDATA[Reply to const on Mon, 05 Aug 2013 16:54:08 GMT]]></title><description><![CDATA[<p>static schrieb:</p>
<blockquote>
<p>Wenn du drauf bestehst, die Syntax ist:</p>
<pre><code class="language-cpp">extern vector&lt;int&gt; V; // im header

vector&lt;int&gt; V; // im cpp
</code></pre>
</blockquote>
<p>Und wo definiere ich die Elemente von V?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2343656</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2343656</guid><dc:creator><![CDATA[c+++++++++]]></dc:creator><pubDate>Mon, 05 Aug 2013 16:54:08 GMT</pubDate></item><item><title><![CDATA[Reply to const on Mon, 05 Aug 2013 17:00:39 GMT]]></title><description><![CDATA[<p>c+++++++++ schrieb:</p>
<blockquote>
<p>Und wo definiere ich die Elemente von V?</p>
</blockquote>
<p>Merkst du, wieso deine Idee optimierter Unsinn ist? <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>
<p>Entweder sind die Elemente fest, dann ist das kein vector sondern eine konstante Liste von konstanten Ausdrücken. Oder es kann ohnehin nichts optimiert werden, denn es ist <strong>schwieriger</strong> für den Compiler, mit globalen Variablen irgendetwas zu optimieren. Der hat nämlich genau das gleiche Problem, wie der Programmierer: Bei globalen Variablen kann man gar nicht mehr sagen, wann sie sich wo ändern, weil das kleinste Teil, das man nicht sehen kann, eine Änderung verursachen könnte.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2343657</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2343657</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Mon, 05 Aug 2013 17:00:39 GMT</pubDate></item><item><title><![CDATA[Reply to const on Mon, 05 Aug 2013 17:03:09 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>Entweder sind die Elemente fest,</p>
</blockquote>
<p>Ja, das ist der Fall.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2343659</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2343659</guid><dc:creator><![CDATA[c+++++++++]]></dc:creator><pubDate>Mon, 05 Aug 2013 17:03:09 GMT</pubDate></item><item><title><![CDATA[Reply to const on Mon, 05 Aug 2013 17:14:18 GMT]]></title><description><![CDATA[<pre><code>const int foo[] = {1,2,3,4,5};
</code></pre>
<p>Damit wird das auch tatsächlich optimiert. Beim vector ist mir das zuvor nicht gelungen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2343664</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2343664</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Mon, 05 Aug 2013 17:14:18 GMT</pubDate></item><item><title><![CDATA[Reply to const on Mon, 05 Aug 2013 17:18:46 GMT]]></title><description><![CDATA[<p>Aber gibt das keine Probleme, wenn das im Header steht und somit in verschiedene .cpp-Files inkludiert wird?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2343667</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2343667</guid><dc:creator><![CDATA[c+++++++++]]></dc:creator><pubDate>Mon, 05 Aug 2013 17:18:46 GMT</pubDate></item><item><title><![CDATA[Reply to const on Mon, 05 Aug 2013 17:25:13 GMT]]></title><description><![CDATA[<p>c+++++++++ schrieb:</p>
<blockquote>
<p>Kann das Probleme geben, wenn dadurch V in mehreren .cpp-Files definiert wird?</p>
</blockquote>
<p>Bedingt. Konstante nicht-lokale Objekte haben (sofern sie nicht anders deklariert werden) internal Linkage. Die Definitionen in unterschiedlichen Übersetzungseinheiten stören sich also gegenseitig nicht.<br />
Zu einer ODR-Verletzung kann es kommen, wenn dieses Objekt von inline-Funktionen verwendet wird, weil diese sich dann in unterschiedlichen ÜEs nicht mehr auf das gleiche Objekt beziehen und also nicht identisch sind. Praktisch spielt dieses Problem nur eine geringe Rolle (ggf. im Zusammenhang mit der Reihenfolge dynamischer Initialisierung: wenn die Funktion tatsächlich nicht geinlined wird und die out-of-line-Kopie aus einer anderen Übersetzungseinheit stammt).<br />
Sofern möglich, empfehle hier eher ein Objekt, das statisch initialisiertbar ist (std::array, oder normales Array). Nur dann sind Zugriffe auf den Wert der Elemente konstante Ausdrücke (in diesem Fall liegt dann auch keine ODR-Verletzung i.o.S. vor) und damit leicht optimierbar.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2343671</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2343671</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Mon, 05 Aug 2013 17:25:13 GMT</pubDate></item><item><title><![CDATA[Reply to const on Mon, 05 Aug 2013 17:30:44 GMT]]></title><description><![CDATA[<p>camper schrieb:</p>
<blockquote>
<p>Sofern möglich, empfehle hier eher ein Objekt, das statisch initialisiertbar ist (std::array, oder normales Array).</p>
</blockquote>
<p>Danke, also:</p>
<pre><code>const int V {1,2,3,4,5};
// oder
std::array V{1,2,3,4,5};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2343676</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2343676</guid><dc:creator><![CDATA[c+++++++++]]></dc:creator><pubDate>Mon, 05 Aug 2013 17:30:44 GMT</pubDate></item><item><title><![CDATA[Reply to const on Mon, 05 Aug 2013 17:34:38 GMT]]></title><description><![CDATA[<p><code>std::tr1::array</code> nicht zu vergessen. :p</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2343678</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2343678</guid><dc:creator><![CDATA[out]]></dc:creator><pubDate>Mon, 05 Aug 2013 17:34:38 GMT</pubDate></item><item><title><![CDATA[Reply to const on Tue, 06 Aug 2013 03:27:46 GMT]]></title><description><![CDATA[<p>c+++++++++ schrieb:</p>
<blockquote>
<p>Danke, also:...</p>
</blockquote>
<p>fast.</p>
<pre><code>const int V[] {1,2,3,4,5};
</code></pre>
<p>oder (besser)</p>
<pre><code>const std::array&lt;int, 5&gt; V{1,2,3,4,5};
</code></pre>
<p>bei zweiterem nicht</p>
<pre><code>#include &lt;array&gt;
</code></pre>
<p>vergessen <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>Test bei <a href="http://ideone.com/TWhbFd" rel="nofollow">Ideone.com</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2343759</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2343759</guid><dc:creator><![CDATA[Cyres]]></dc:creator><pubDate>Tue, 06 Aug 2013 03:27:46 GMT</pubDate></item></channel></rss>