<?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[Warum Array-Größe angeben bei neuer new[]{} Syntax?]]></title><description><![CDATA[<p>In C++11 gibts ja jetzt wie ich durch einen Beitrag von SeppJ festgestellt habe, eine neue Schreibweise, um Arrays von Heap-Objekten zu initialisieren:</p>
<pre><code class="language-cpp">int* i = new int[3] { 1, 2, 3 };
</code></pre>
<p>Warum muss man hier die Größe des Arrays angeben? Sowas kann der Compiler doch selbst bestimmen.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/302314/warum-array-größe-angeben-bei-neuer-new-syntax</link><generator>RSS for Node</generator><lastBuildDate>Tue, 11 Aug 2026 09:22:32 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/302314.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 16 Apr 2012 07:03:42 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Warum Array-Größe angeben bei neuer new[]{} Syntax? on Mon, 16 Apr 2012 07:03:42 GMT]]></title><description><![CDATA[<p>In C++11 gibts ja jetzt wie ich durch einen Beitrag von SeppJ festgestellt habe, eine neue Schreibweise, um Arrays von Heap-Objekten zu initialisieren:</p>
<pre><code class="language-cpp">int* i = new int[3] { 1, 2, 3 };
</code></pre>
<p>Warum muss man hier die Größe des Arrays angeben? Sowas kann der Compiler doch selbst bestimmen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2202391</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2202391</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Mon, 16 Apr 2012 07:03:42 GMT</pubDate></item><item><title><![CDATA[Reply to Warum Array-Größe angeben bei neuer new[]{} Syntax? on Mon, 16 Apr 2012 07:26:44 GMT]]></title><description><![CDATA[<p>Was passiert bei new int[3] { 1, 2 } ? <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/2202392</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2202392</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Mon, 16 Apr 2012 07:26:44 GMT</pubDate></item><item><title><![CDATA[Reply to Warum Array-Größe angeben bei neuer new[]{} Syntax? on Mon, 16 Apr 2012 07:44:41 GMT]]></title><description><![CDATA[<p>Da wird das dritte Element default-konstruiert. Ich verstehe nicht, worauf du hinaus willst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2202398</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2202398</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Mon, 16 Apr 2012 07:44:41 GMT</pubDate></item><item><title><![CDATA[Reply to Warum Array-Größe angeben bei neuer new[]{} Syntax? on Mon, 16 Apr 2012 07:50:59 GMT]]></title><description><![CDATA[<p>314159265358979 schrieb:</p>
<blockquote>
<p>Da wird das dritte Element default-konstruiert. Ich verstehe nicht, worauf du hinaus willst.</p>
</blockquote>
<p>Ohne Großenangabe würde es aber ein Zwei-elementiges Array sein, anstatt eines Drei-elementiges Array. Große des Array != Große der Initializer (Kein Ahnung wie Standardkonform heißt).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2202399</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2202399</guid><dc:creator><![CDATA[Zeus]]></dc:creator><pubDate>Mon, 16 Apr 2012 07:50:59 GMT</pubDate></item><item><title><![CDATA[Reply to Warum Array-Größe angeben bei neuer new[]{} Syntax? on Mon, 16 Apr 2012 07:54:44 GMT]]></title><description><![CDATA[<p>Ja und? Das ist doch genau das was ich möchte, wenn ich 2 Initializer angebe und keine Größe. Wenn ich es größer haben möchte, gebe ich eben eine an.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2202400</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2202400</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Mon, 16 Apr 2012 07:54:44 GMT</pubDate></item><item><title><![CDATA[Reply to Warum Array-Größe angeben bei neuer new[]{} Syntax? on Mon, 16 Apr 2012 08:11:59 GMT]]></title><description><![CDATA[<p>Zeus schrieb:</p>
<blockquote>
<p>314159265358979 schrieb:</p>
<blockquote>
<p>Da wird das dritte Element default-konstruiert. Ich verstehe nicht, worauf du hinaus willst.</p>
</blockquote>
<p>Ohne Großenangabe würde es aber ein Zwei-elementiges Array sein, anstatt eines Drei-elementiges Array. Große des Array != Große der Initializer (Kein Ahnung wie Standardkonform heißt).</p>
</blockquote>
<p>Und? Es spricht doch nichts dagegen, dass man in dem Fall die Größe mit angibt. Wenn man aber drei Elemente haben will, und deren Werte kennt? Dann wäre es doch praktisch, wenn man es machen könnte, wie pi es zeigt. Zumal es ja auch bei statischen Arrays geht. Wozu der Sonderfall? Ich finde die Frage durchaus berechtigt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2202401</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2202401</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Mon, 16 Apr 2012 08:11:59 GMT</pubDate></item><item><title><![CDATA[Reply to Warum Array-Größe angeben bei neuer new[]{} Syntax? on Mon, 16 Apr 2012 07:55:35 GMT]]></title><description><![CDATA[<p>Zeus schrieb:</p>
<blockquote>
<p>Ohne Großenangabe würde es aber ein Zwei-elementiges Array sein, anstatt eines Drei-elementiges Array.</p>
</blockquote>
<p>Ich versteh schon, warum Pi hier ständig ausflippt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2202402</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2202402</guid><dc:creator><![CDATA[Bashar]]></dc:creator><pubDate>Mon, 16 Apr 2012 07:55:35 GMT</pubDate></item><item><title><![CDATA[Reply to Warum Array-Größe angeben bei neuer new[]{} Syntax? on Mon, 16 Apr 2012 08:04:14 GMT]]></title><description><![CDATA[<p>Ich könnte mir vorstellen dass man einfach die syntaktische Mehrdeutigkeit mit Lambdas vermeiden wollte.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2202403</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2202403</guid><dc:creator><![CDATA[dot]]></dc:creator><pubDate>Mon, 16 Apr 2012 08:04:14 GMT</pubDate></item><item><title><![CDATA[Reply to Warum Array-Größe angeben bei neuer new[]{} Syntax? on Mon, 16 Apr 2012 08:50:46 GMT]]></title><description><![CDATA[<p>Ich könnte mir vorstellen, dass man es für einen hinreichend seltenen Anwendungsfall gehalten hat, um sich nicht weiter darum zu kümmern. Wenn man Arrays mit new[] erstellt, tut man das ja in aller Regel nur, weil man die Länge zur Compilezeit nicht kennt und diese Schreibweise eh nicht benutzen kann.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2202416</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2202416</guid><dc:creator><![CDATA[seldon]]></dc:creator><pubDate>Mon, 16 Apr 2012 08:50:46 GMT</pubDate></item><item><title><![CDATA[Reply to Warum Array-Größe angeben bei neuer new[]{} Syntax? on Mon, 16 Apr 2012 08:51:17 GMT]]></title><description><![CDATA[<p>Hmm... syntaktische Mehrdeutigkeit? Also ich erwarte hinter <code>new</code> einen Objekttypen. Aber das ist jetzt auch nicht mein Spezialgebiet. Möglicherweise hat man einfach eine entsprechende Regel vergessen und nicht so weit gedacht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2202417</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2202417</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Mon, 16 Apr 2012 08:51:17 GMT</pubDate></item><item><title><![CDATA[Reply to Warum Array-Größe angeben bei neuer new[]{} Syntax? on Mon, 16 Apr 2012 09:03:47 GMT]]></title><description><![CDATA[<p>krümelkacker schrieb:</p>
<blockquote>
<p>Hmm... syntaktische Mehrdeutigkeit? Also ich erwarte hinter <code>new</code> einen Objekttypen. Aber das ist jetzt auch nicht mein Spezialgebiet. Möglicherweise hat man einfach eine entsprechende Regel vergessen und nicht so weit gedacht.</p>
</blockquote>
<p>Ein <code>int []{}</code> wäre ein Lambda das nichts captured und nichts tut <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="😉"
    /><br />
Aber die Tatsache dass man mit new erzeuge Arrays in der Regel sowieso nicht initialisieren kann, gibt imo fast noch die bessere Erklärung ab...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2202420</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2202420</guid><dc:creator><![CDATA[dot]]></dc:creator><pubDate>Mon, 16 Apr 2012 09:03:47 GMT</pubDate></item><item><title><![CDATA[Reply to Warum Array-Größe angeben bei neuer new[]{} Syntax? on Mon, 16 Apr 2012 09:39:25 GMT]]></title><description><![CDATA[<p>dot schrieb:</p>
<blockquote>
<p>Ein <code>int []{}</code> wäre ein Lambda das nichts captured und nichts tut <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>
</blockquote>
<p>Äh, was? Den Rückgabetyp gibt man bei Lambdas doch mit -&gt; an. Eine Prä-Schreibweise wäre mir neu.</p>
<p>dot schrieb:</p>
<blockquote>
<p>Aber die Tatsache dass man mit new erzeuge Arrays in der Regel sowieso nicht initialisieren kann, gibt imo fast noch die bessere Erklärung ab...</p>
</blockquote>
<p>?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2202433</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2202433</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Mon, 16 Apr 2012 09:39:25 GMT</pubDate></item><item><title><![CDATA[Reply to Warum Array-Größe angeben bei neuer new[]{} Syntax? on Mon, 16 Apr 2012 10:25:42 GMT]]></title><description><![CDATA[<p>Kann sein, dass ich voellig falsch liege, aber funktioneirt das nicht auch?</p>
<pre><code class="language-cpp">struct Object{
    Object(int, int){}
    Object(int){}
};

//spaeter
Object* obj = new Object{int,int};//array von 2 Object oder 1 Object?
</code></pre>
<p>hab keine Ahnung von C++11, aber wenn das so ginge, dann waere das eine Erklaerung fuer die Einschraenkung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2202442</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2202442</guid><dc:creator><![CDATA[otze_logout]]></dc:creator><pubDate>Mon, 16 Apr 2012 10:25:42 GMT</pubDate></item><item><title><![CDATA[Reply to Warum Array-Größe angeben bei neuer new[]{} Syntax? on Mon, 16 Apr 2012 11:42:05 GMT]]></title><description><![CDATA[<p>dot schrieb:</p>
<blockquote>
<p>krümelkacker schrieb:</p>
<blockquote>
<p>Hmm... syntaktische Mehrdeutigkeit? Also ich erwarte hinter <code>new</code> einen Objekttypen. Aber das ist jetzt auch nicht mein Spezialgebiet. Möglicherweise hat man einfach eine entsprechende Regel vergessen und nicht so weit gedacht.</p>
</blockquote>
<p>Ein <code>int []{}</code> wäre ein Lambda das nichts captured und nichts tut <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>
</blockquote>
<p>Die Maximum-munch-regel für new-Deklaratoren sollte hier Mehrdeutigkeiten verhindern (lasse mich nat. gerne von einem Gegenbeispiel überzeugen).<br />
Nach kurzem Überfliegen von einigen Proposals zur Initilisierungssyntax komme ich zu folgenden Schlussfolgerungen:<br />
1. Eine solche Spracherweiterunng (der Form new foo[]{ ... }) dürfte ohne Probleme möglich sein,<br />
2. Diese Möglichkeit dieser Form ist nicht Gegenstand der uniformen Initiliasierung - dort geht es darum, deklarierte/definierte Objekte einheitlich zu Initialisieren. Beim Vorschlag hier geht es dagegen darum, aus der neuen Syntax heraus eine zusätzliche Form der Deklaration (auslassen des Ausdrucks in den []-Klammern) zu ermöglichen. Das Problem ist also eher mit der neuen auto-Semantik verwandt.<br />
3. Soweit ersichtlich, wurde kein solcher Vorschlag an das Standardkomittee herangetragen oder aber nicht für wichtig genug gehalten.<br />
Der praktische Nutzen ist ja begrenzt: da in diesem Fall die Größe des Arrays bereits beim Compilieren feststeht, wird man i.d.R. sowieso nicht new gebrauchen, oder aber kann ohne nennenswerten Overhead einen Container benutzen. Und in generischem Code sollte es für gewöhnlich leicht sein, die Anzahl der Elemente zu ermitteln, so dass dort die explizite Angabe kein großes Hindernis darstellt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2202465</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2202465</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Mon, 16 Apr 2012 11:42:05 GMT</pubDate></item></channel></rss>