<?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[Deklaration in Schleife oder nicht?]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich frage mich jetzt schon länger ob es einen Unterschied gibt zwischen folgenden beiden Code-Teilen (<em>außer</em> dass bei der zweiten Variante die Variable test nur in der for Schleife verfügbar ist):</p>
<pre><code>int test;
for (unsigned int i = 0; i &lt; 100; i++) {
    test = 42;
    // Mach irgendwas
}
</code></pre>
<p>oder:</p>
<pre><code>for (unsigned int i = 0; i &lt; 100; i++) {
    int test = 42;
    // Mach irgendwas
}
</code></pre>
<p>Ich würde nämlich gerne oft die zweite Variante verwenden (da kürzer wenn test nur in der for-Schleife benötigt wird), bin mir aber nicht sicher ob das nicht langsamer ist? Denn das erste ist ja nur eine Zuweisung, das zweite eine Deklaration und eine Zuweisung...</p>
<p>Oder macht das keinen Unterschied?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/324105/deklaration-in-schleife-oder-nicht</link><generator>RSS for Node</generator><lastBuildDate>Wed, 15 Jul 2026 02:33:56 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/324105.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 03 Mar 2014 12:01:51 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Deklaration in Schleife oder nicht? on Mon, 03 Mar 2014 12:02:17 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich frage mich jetzt schon länger ob es einen Unterschied gibt zwischen folgenden beiden Code-Teilen (<em>außer</em> dass bei der zweiten Variante die Variable test nur in der for Schleife verfügbar ist):</p>
<pre><code>int test;
for (unsigned int i = 0; i &lt; 100; i++) {
    test = 42;
    // Mach irgendwas
}
</code></pre>
<p>oder:</p>
<pre><code>for (unsigned int i = 0; i &lt; 100; i++) {
    int test = 42;
    // Mach irgendwas
}
</code></pre>
<p>Ich würde nämlich gerne oft die zweite Variante verwenden (da kürzer wenn test nur in der for-Schleife benötigt wird), bin mir aber nicht sicher ob das nicht langsamer ist? Denn das erste ist ja nur eine Zuweisung, das zweite eine Deklaration und eine Zuweisung...</p>
<p>Oder macht das keinen Unterschied?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2386269</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2386269</guid><dc:creator><![CDATA[happystudent]]></dc:creator><pubDate>Mon, 03 Mar 2014 12:02:17 GMT</pubDate></item><item><title><![CDATA[Reply to Deklaration in Schleife oder nicht? on Mon, 03 Mar 2014 12:10:48 GMT]]></title><description><![CDATA[<p>der generierte assemblercode sieht bestimmt gleich aus. der speicher von variablen auf dem stack wird ja schon während der kompilierung &quot;reserviert&quot;.</p>
<p>damit die beiden codes auch wirklich das selbe ausdrücken darf test innerhalb der schleife nicht verändert werden, womit ich ihren sinn anzweifle.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2386274</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2386274</guid><dc:creator><![CDATA[Fytch]]></dc:creator><pubDate>Mon, 03 Mar 2014 12:10:48 GMT</pubDate></item><item><title><![CDATA[Reply to Deklaration in Schleife oder nicht? on Mon, 03 Mar 2014 16:23:10 GMT]]></title><description><![CDATA[<p>Das erste ist schlicht weg falsch. Variablen werden bei der Deklaration auch initialisiert. Das solltest Du Dir gleich angewöhnen.</p>
<p>Variablen sollten so lokal wie möglich sein. Also Lösung 2.<br />
Ich denke der Compiler wird das optimieren und die Zuweisung aus der Schleife rausziehen.</p>
<p>Edith: Ok Ok. Das oben muss natürlich Definition heissen.</p>
<p>Wie weiter unten schon steht wird der gleiche Code erzeugt falls &quot;test&quot; in der Schleife NICHT verändert wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2386275</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2386275</guid><dc:creator><![CDATA[MichelRT]]></dc:creator><pubDate>Mon, 03 Mar 2014 16:23:10 GMT</pubDate></item><item><title><![CDATA[Reply to Deklaration in Schleife oder nicht? on Mon, 03 Mar 2014 12:17:32 GMT]]></title><description><![CDATA[<p>MichelRT schrieb:</p>
<blockquote>
<p>Das erste ist schlicht weg falsch.</p>
</blockquote>
<p>Nein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2386276</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2386276</guid><dc:creator><![CDATA[Bashar]]></dc:creator><pubDate>Mon, 03 Mar 2014 12:17:32 GMT</pubDate></item><item><title><![CDATA[Reply to Deklaration in Schleife oder nicht? on Mon, 03 Mar 2014 12:22:58 GMT]]></title><description><![CDATA[<p>MichelRT schrieb:</p>
<blockquote>
<p>Das erste ist schlicht weg falsch.</p>
</blockquote>
<p>nö.</p>
<p>MichelRT schrieb:</p>
<blockquote>
<p>Variablen werden bei der Deklaration auch initialisiert. Das solltest Du Dir gleich angewöhnen.</p>
</blockquote>
<p>nö, das pauschal zu sagen ist falsch.</p>
<p>MichelRT schrieb:</p>
<blockquote>
<p>und die Zuweisung aus der Schleife rausziehen.</p>
</blockquote>
<p>welche zuweisung? sehe da keine...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2386277</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2386277</guid><dc:creator><![CDATA[Fytch]]></dc:creator><pubDate>Mon, 03 Mar 2014 12:22:58 GMT</pubDate></item><item><title><![CDATA[Reply to Deklaration in Schleife oder nicht? on Mon, 03 Mar 2014 13:03:47 GMT]]></title><description><![CDATA[<p>MichelRT schrieb:</p>
<blockquote>
<p>Variablen werden bei der Deklaration auch initialisiert.</p>
</blockquote>
<pre><code>extern int i;
</code></pre>
<p>Womit wird i hier initialisiert?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2386285</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2386285</guid><dc:creator><![CDATA[Deklarator]]></dc:creator><pubDate>Mon, 03 Mar 2014 13:03:47 GMT</pubDate></item><item><title><![CDATA[Reply to Deklaration in Schleife oder nicht? on Mon, 03 Mar 2014 14:57:50 GMT]]></title><description><![CDATA[<p>Ok, also in die Schleife damit, richtig?</p>
<p>Deklarator schrieb:</p>
<blockquote>
<p>Womit wird i hier initialisiert?</p>
</blockquote>
<p>Äh, keine Ahnung, mit was? <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="😃"
    /><br />
Ich würde ja sagen mit nix? Aber irgendwas steht ja immer drin auch wenn man nichts explizit hinschreibt... Also meistens dann halt ein sehr großer (oder sehr kleiner) Wert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2386308</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2386308</guid><dc:creator><![CDATA[happystudent]]></dc:creator><pubDate>Mon, 03 Mar 2014 14:57:50 GMT</pubDate></item><item><title><![CDATA[Reply to Deklaration in Schleife oder nicht? on Mon, 03 Mar 2014 15:18:56 GMT]]></title><description><![CDATA[<p>happystudent schrieb:</p>
<blockquote>
<p>Ok, also in die Schleife damit, richtig?</p>
</blockquote>
<p>wie gesagt: wenn beide varianten bei deinem code das selbe bewirken, dann zweifle ich den sinn an. zeig halt den echten code...</p>
<p>happystudent schrieb:</p>
<blockquote>
<p>Deklarator schrieb:</p>
<blockquote>
<p>Womit wird i hier initialisiert?</p>
</blockquote>
<p>Äh, keine Ahnung, mit was? <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="😃"
    /><br />
Ich würde ja sagen mit nix? Aber irgendwas steht ja immer drin auch wenn man nichts explizit hinschreibt... Also meistens dann halt ein sehr großer (oder sehr kleiner) Wert.</p>
</blockquote>
<p>der autor wollte eher suggerieren, dass MichelRT von einer deklaration sprach (statt von einer definiton), was so nicht richtig ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2386313</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2386313</guid><dc:creator><![CDATA[Fytch]]></dc:creator><pubDate>Mon, 03 Mar 2014 15:18:56 GMT</pubDate></item><item><title><![CDATA[Reply to Deklaration in Schleife oder nicht? on Mon, 03 Mar 2014 19:47:16 GMT]]></title><description><![CDATA[<p>asfdlol schrieb:</p>
<blockquote>
<p>wie gesagt: wenn beide varianten bei deinem code das selbe bewirken, dann zweifle ich den sinn an. zeig halt den echten code...</p>
</blockquote>
<pre><code>// Suche größtes Element in der aktuellen Spalte für Pivotisierung
for (unsigned int i = 0, ei = matrix.rows(); i != ei; i++) {
    double maxValue = DBL_MIN;
    for (unsigned int j = 0, ej = matrix.cols(); j != ej; j++) {
        if (matrix[i][j] &gt; maxValue) {
            maxValue = matrix[i][j];
        }
    }
}
</code></pre>
<p>macht genau das gleiche wie:</p>
<pre><code>// Suche größtes Element in der aktuellen Spalte für Pivotisierung
double maxValue;
for (unsigned int i = 0, ei = matrix.rows(); i != ei; i++) {
    maxValue = DBL_MIN;
    for (unsigned int j = 0, ej = matrix.cols(); j != ej; j++) {
        if (matrix[i][j] &gt; maxValue) {
            maxValue = matrix[i][j];
        }
    }
}
</code></pre>
<p>Wieso du hier den Sinn anzweifeln willst weiß ich nicht, beide Varianten machen genau das gleiche (Wie gesagt natürlich bis auf den Unterschied dass maxValue dann auch außerhalb der Schleife verfügbar ist)?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2386366</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2386366</guid><dc:creator><![CDATA[happystudent]]></dc:creator><pubDate>Mon, 03 Mar 2014 19:47:16 GMT</pubDate></item><item><title><![CDATA[Reply to Deklaration in Schleife oder nicht? on Mon, 03 Mar 2014 20:02:36 GMT]]></title><description><![CDATA[<p>jo, macht beides genau gleich viel: nix.</p>
<p>ausserdem seh ich nicht wieso du versucht std::max_element nachzuimplementieren und was das mit DBL_MIN soll:</p>
<pre><code>for (unsigned int i = 0, ei = matrix.rows(); i != ei; i++)
{ 
    double maxValue = *std::max_element(matrix[i], matrix[i] + matrix.cols());
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2386367</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2386367</guid><dc:creator><![CDATA[Fytch]]></dc:creator><pubDate>Mon, 03 Mar 2014 20:02:36 GMT</pubDate></item><item><title><![CDATA[Reply to Deklaration in Schleife oder nicht? on Mon, 03 Mar 2014 20:22:33 GMT]]></title><description><![CDATA[<p>asfdlol schrieb:</p>
<blockquote>
<p>ausserdem seh ich nicht wieso du versucht std::max_element nachzuimplementieren und was das mit DBL_MIN soll:</p>
</blockquote>
<p>eveentuell, weil er max_element implementieren will? Sein Name ist kein Hint? Ehrlich nicht? Nicht so ein Bisschen? <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>//edit und ich kenne so auf die schnelle 3 Implementierungen, bei der dein Code so richtig krass seitenweise compilerfehler ausspucken würde, weil du annimmst, dass op[] einen Zeiger zurückgibt <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/2386372</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2386372</guid><dc:creator><![CDATA[otze]]></dc:creator><pubDate>Mon, 03 Mar 2014 20:22:33 GMT</pubDate></item><item><title><![CDATA[Reply to Deklaration in Schleife oder nicht? on Mon, 03 Mar 2014 20:38:00 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/30076">@happystudent</a><br />
Bei nem <code>int</code> ist es Wurscht.</p>
<p>Bei Klassen die teuer zu konstruieren/zerstören sind, ist es nicht wurscht. Weil die ja bei der 2. Variante immer wieder zerstört und neu konstruiert werden.<br />
(Wobei es natürlich auch da wurscht ist, falls die Zuweisung gleich teuer ist wie Zerstören + neu Konstruieren.)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2386379</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2386379</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Mon, 03 Mar 2014 20:38:00 GMT</pubDate></item><item><title><![CDATA[Reply to Deklaration in Schleife oder nicht? on Mon, 03 Mar 2014 21:56:54 GMT]]></title><description><![CDATA[<p>asfdlol schrieb:</p>
<blockquote>
<p>jo, macht beides genau gleich viel: nix.</p>
<p>ausserdem seh ich nicht wieso du versucht std::max_element nachzuimplementieren und was das mit DBL_MIN soll:</p>
</blockquote>
<p>Nichts? Es findet das größte Element der aktuellen Spalte was wichtig für Pivotisierung beim Lösen eines Linearen Gleichungssystems ist. DBL_MIN ist der kleinste double Wert, daher macht es Sinn eine Variable die am Ende das <em>Maximum</em> beinhalten soll damit zu initialisieren... was gibts da nicht zu verstehen?</p>
<p>Es war ja auch nur ein Beispiel um das Problem zu verdeutlichen.</p>
<p>hustbaer schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/30076">@happystudent</a><br />
Bei nem <code>int</code> ist es Wurscht.</p>
<p>Bei Klassen die teuer zu konstruieren/zerstören sind, ist es nicht wurscht. Weil die ja bei der 2. Variante immer wieder zerstört und neu konstruiert werden.<br />
(Wobei es natürlich auch da wurscht ist, falls die Zuweisung gleich teuer ist wie Zerstören + neu Konstruieren.)</p>
</blockquote>
<p>Danke, sowas wollte ich hören. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2386405</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2386405</guid><dc:creator><![CDATA[happystudent]]></dc:creator><pubDate>Mon, 03 Mar 2014 21:56:54 GMT</pubDate></item><item><title><![CDATA[Reply to Deklaration in Schleife oder nicht? on Mon, 03 Mar 2014 22:03:53 GMT]]></title><description><![CDATA[<p>Aber das Rausziehen auch nicht übertreiben.<br />
<a href="http://fara.cs.uni-potsdam.de/~kaufmann/?page=GenCppFaqs&amp;faq=Declare#Answ" rel="nofollow">http://fara.cs.uni-potsdam.de/~kaufmann/?page=GenCppFaqs&amp;faq=Declare#Answ</a></p>
<p>Selten, daß ich mal aus Performanceüberlegungen was rausziehe.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2386409</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2386409</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Mon, 03 Mar 2014 22:03:53 GMT</pubDate></item><item><title><![CDATA[Reply to Deklaration in Schleife oder nicht? on Mon, 03 Mar 2014 22:12:28 GMT]]></title><description><![CDATA[<p>happystudent schrieb:</p>
<blockquote>
<p>asfdlol schrieb:</p>
<blockquote>
<p>jo, macht beides genau gleich viel: nix.</p>
<p>ausserdem seh ich nicht wieso du versucht std::max_element nachzuimplementieren und was das mit DBL_MIN soll:</p>
</blockquote>
<p>Nichts? Es findet das größte Element der aktuellen Spalte was wichtig für Pivotisierung beim Lösen eines Linearen Gleichungssystems ist. DBL_MIN ist der kleinste double Wert, daher macht es Sinn eine Variable die am Ende das <em>Maximum</em> beinhalten soll damit zu initialisieren... was gibts da nicht zu verstehen?</p>
<p>Es war ja auch nur ein Beispiel um das Problem zu verdeutlichen.</p>
</blockquote>
<p>und wo speicherst du die maximalen elemente? nirgends. daher machen beide nichts. sonst könntest du ja gleich in den zielspeicher reinschreiben und hast das ganze theater nicht. und statt mit einem unflexiblen minimalwert zu initialisieren kannst du einfach das erste element nehmen...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2386413</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2386413</guid><dc:creator><![CDATA[Fytch]]></dc:creator><pubDate>Mon, 03 Mar 2014 22:12:28 GMT</pubDate></item><item><title><![CDATA[Reply to Deklaration in Schleife oder nicht? on Mon, 03 Mar 2014 22:40:57 GMT]]></title><description><![CDATA[<p>asfdlol schrieb:</p>
<blockquote>
<p>und wo speicherst du die maximalen elemente? nirgends. daher machen beide nichts. sonst könntest du ja gleich in den zielspeicher reinschreiben und hast das ganze theater nicht. und statt mit einem unflexiblen minimalwert zu initialisieren kannst du einfach das erste element nehmen...</p>
</blockquote>
<p>Und wo erstelle ich das Objekt matrix? Und wo include ich überhaupt float.h um auf DBL_MIN zugreifen zu können?</p>
<p>Natürlich macht der Code alleine nichts (stimmt übrigens auch nicht, er findet das absolut größte Element der Matrix und speichert es in maxValue). Und ja, man kann auch das erste Elemnt nehmen anstatt DBL_MIN. Ändert an der eigentlichen Frage aber überhaupt gar nichts.</p>
<p>Das war einfach ein minimales Code-Snippet um das Problem zu veranschaulichen. Ich hätt auch den ganzen Code des Gauss-Algorithmus hinklatschen können, das hätte aber keinerlei Mehrwert gebracht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2386421</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2386421</guid><dc:creator><![CDATA[happystudent]]></dc:creator><pubDate>Mon, 03 Mar 2014 22:40:57 GMT</pubDate></item></channel></rss>