<?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[Wie kann ich hier das Array mit Werte initialisieren?]]></title><description><![CDATA[<p>Hi Leute!</p>
<p>Ich hab folgenden Code heute geschrieben:</p>
<pre><code class="language-cpp">#include&lt;iostream&gt;
using namespace std;

class myVec
{
private:
	double *v;	//Zeiger, weil keine feste Größe!
	int length;

public:
	myVec()		//allgemeiner Konstruktor
	{
		v = new double[1];
		v[0] = 0;
		length = 0;
	}

	myVec(double *vec)		//Vektorkonstruktor
	{
		length = sizeof(vec)/sizeof(vec[0]);
		v = new double[length+1];
		for(int i=0; i&lt;length; i++)
		{
			v[i] = vec[i];
		}
	}

	myVec operator = (myVec&amp; vec)          //Überladung des =
	{
		if(&amp;vec != this)
		{
			delete v;
			length = vec.length;
			v = new double[length+1];
			for(int i=0; i&lt;length; i++)
			{
				v[i] = vec.v[i];
			}
		}

	return *this;
	}	
};

int main()
{
	myVec vec1;

	vec1 = {1,2,3,4,5};

system(&quot;pause&quot;);
return 0;
}
</code></pre>
<p>Wie ihr wahrscheinlich seht, funktioniert mein Code soweit leider nicht. Ich möchte hier in der Zeile 55 den vec1 mit diesen 5 Zahlen initialisieren. Doch leider wirft mir mein Compiler ein paar Fehler. Ich weiß aber nicht wo ich hier jetzt den Fehler suchen soll!</p>
<p>Könnt ihr mir helfen?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/297470/wie-kann-ich-hier-das-array-mit-werte-initialisieren</link><generator>RSS for Node</generator><lastBuildDate>Fri, 14 Aug 2026 10:15:19 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/297470.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 29 Dec 2011 18:11:16 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Wie kann ich hier das Array mit Werte initialisieren? on Thu, 29 Dec 2011 18:12:04 GMT]]></title><description><![CDATA[<p>Hi Leute!</p>
<p>Ich hab folgenden Code heute geschrieben:</p>
<pre><code class="language-cpp">#include&lt;iostream&gt;
using namespace std;

class myVec
{
private:
	double *v;	//Zeiger, weil keine feste Größe!
	int length;

public:
	myVec()		//allgemeiner Konstruktor
	{
		v = new double[1];
		v[0] = 0;
		length = 0;
	}

	myVec(double *vec)		//Vektorkonstruktor
	{
		length = sizeof(vec)/sizeof(vec[0]);
		v = new double[length+1];
		for(int i=0; i&lt;length; i++)
		{
			v[i] = vec[i];
		}
	}

	myVec operator = (myVec&amp; vec)          //Überladung des =
	{
		if(&amp;vec != this)
		{
			delete v;
			length = vec.length;
			v = new double[length+1];
			for(int i=0; i&lt;length; i++)
			{
				v[i] = vec.v[i];
			}
		}

	return *this;
	}	
};

int main()
{
	myVec vec1;

	vec1 = {1,2,3,4,5};

system(&quot;pause&quot;);
return 0;
}
</code></pre>
<p>Wie ihr wahrscheinlich seht, funktioniert mein Code soweit leider nicht. Ich möchte hier in der Zeile 55 den vec1 mit diesen 5 Zahlen initialisieren. Doch leider wirft mir mein Compiler ein paar Fehler. Ich weiß aber nicht wo ich hier jetzt den Fehler suchen soll!</p>
<p>Könnt ihr mir helfen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2161916</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2161916</guid><dc:creator><![CDATA[vip*r]]></dc:creator><pubDate>Thu, 29 Dec 2011 18:12:04 GMT</pubDate></item><item><title><![CDATA[Reply to Wie kann ich hier das Array mit Werte initialisieren? on Thu, 29 Dec 2011 19:05:41 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>so kannst du nur Instanzierungen von struct's initialisieren,<br />
bei Klassen ist das nicht möglich.<br />
Ein möglicher Ansatz wäre ein Konstruktor mit variabler Argumentzahl:</p>
<pre><code class="language-cpp">#include &lt;stdarg.h&gt;
// ...
myVec::myVec(unsigned count, ...)
{
    v = new double[count];
    va_list argptr;
    va_start(argptr, count);
    for(unsigned i = 0; i &lt; count; i++)
        v[i] = va_arg(argptr, double);
    va_end(argptr);
}
// ...

// Kannst du dann so aufrufen:
myVec vec(3, 1.0, 2.0, 3.0);
</code></pre>
<p>Hoffe das hilft weiter <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>
]]></description><link>https://www.c-plusplus.net/forum/post/2161936</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2161936</guid><dc:creator><![CDATA[Exon]]></dc:creator><pubDate>Thu, 29 Dec 2011 19:05:41 GMT</pubDate></item><item><title><![CDATA[Reply to Wie kann ich hier das Array mit Werte initialisieren? on Thu, 29 Dec 2011 19:12:55 GMT]]></title><description><![CDATA[<p>variadic parameters lass mal lieber schön bleiben, da wirst du früher oder später ganz dick auf die nase fallen. wenn dann variadic templates, sofern du einen C++11 compiler hast. und wenn du den hast, dann hast du auch die initializer list, die macht das was du willst.</p>
<p>zu deinem code:<br />
- kein destruktor, kein copy constructor<br />
- keine initalisierungsliste benutzt -&gt; deine version ist langsamer<br />
- warum soll dein vector standardmässig ein element zur verfügung haben?!<br />
- dein 2. constructor funktioniert nicht (sizeof(vec)/sizeof(vec[0])) das geht bei zeigern nicht mehr...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2161945</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2161945</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Thu, 29 Dec 2011 19:12:55 GMT</pubDate></item><item><title><![CDATA[Reply to Wie kann ich hier das Array mit Werte initialisieren? on Thu, 29 Dec 2011 19:14:02 GMT]]></title><description><![CDATA[<p>Ich nehme mal an, dass das Ziel ist, std::vector nachzuprogrammieren und dass das am Ende auch noch richtig werden soll, daher korrigiere ich mal nicht die Fehler, sondern gebe nur den Tipp:</p>
<p>Du suchst std::initializer_list aus dem 2011er-Standard</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2161947</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2161947</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Thu, 29 Dec 2011 19:14:02 GMT</pubDate></item><item><title><![CDATA[Reply to Wie kann ich hier das Array mit Werte initialisieren? on Thu, 29 Dec 2011 19:34:29 GMT]]></title><description><![CDATA[<blockquote>
<p><s>Du suchst std::initializer_list aus dem 2011er-Standard</s><br />
Du suchst ein C++ Tutorial</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/2161955</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2161955</guid><dc:creator><![CDATA[TyRoXx]]></dc:creator><pubDate>Thu, 29 Dec 2011 19:34:29 GMT</pubDate></item><item><title><![CDATA[Reply to Wie kann ich hier das Array mit Werte initialisieren? on Thu, 29 Dec 2011 19:42:06 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/22298">@TyRoXx</a>:</p>
<p>Solche Kommentare lässt du bitte schön (bei mir) in Zukunft bleiben. Ich weiß, dass ich Anfänger bin. Ich habe (mehrere) Tutorials und mittlerweile 2 Bücher zum durcharbeiten da, wo ich auch drüber bin!</p>
<p>Da ich aber eine anständige Frage hier drin formuliert habe, stehen mir DEFINITIV auch anständige Antworten ZU!</p>
<p>Genau wegen solchen Usern wie dir hab ich mich hier schon mal ziemlich aufregen müssen! Also bitte ich dich:</p>
<p>-&gt; mich entweder ignorieren,</p>
<p>oder</p>
<p>-&gt; solche Art von Kommentaren oder &quot;Hilfe&quot; einfach bleiben lassen!!!</p>
<p>Außer negativen Feedback bleibt mir aber noch über, ein großes Dankeschön an den User &quot;Skym0sh0&quot; zu geben. Der Beitrag hat mir sehr weitergeholfen! Danke!</p>
<p>Danke an alle bisherigen Beteiligten! Ich meld mich wieder</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2161959</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2161959</guid><dc:creator><![CDATA[vip*r]]></dc:creator><pubDate>Thu, 29 Dec 2011 19:42:06 GMT</pubDate></item><item><title><![CDATA[Reply to Wie kann ich hier das Array mit Werte initialisieren? on Thu, 29 Dec 2011 20:04:34 GMT]]></title><description><![CDATA[<p>Anmerkungen zum Code:</p>
<pre><code class="language-cpp">#include&lt;iostream&gt;
using namespace std;

class myVec
{
private:
    double *v;    //Zeiger, weil keine feste Größe!
</code></pre>
<p><code>v</code> ist kein vernünftiger Name für ein Klassenelement</p>
<pre><code class="language-cpp">int length;
</code></pre>
<p>Nimm <code>size_t</code> .</p>
<pre><code class="language-cpp">public:
    myVec()        //allgemeiner Konstruktor
</code></pre>
<p>Das heißt Standardkonstruktor. Standard ohne T.</p>
<pre><code class="language-cpp">{
        v = new double[1];
        v[0] = 0;
</code></pre>
<p>Warum 1 Element? Kein Element wäre logischer.<br />
Nimm eine Initialisierungsliste.</p>
<pre><code class="language-cpp">length = 0;
    }

    myVec(double *vec)        //Vektorkonstruktor
</code></pre>
<p><code>const</code> fehlt, die Länge des Arrays fehlt.<br />
Warum nicht gleich ein Template-Konstruktor für Iteratoren?</p>
<pre><code class="language-cpp">{
        length = sizeof(vec)/sizeof(vec[0]);
</code></pre>
<p><div class="plugin-markdown"><input type="checkbox" id="checkbox44237" /><label for="checkbox44237">Du hast Zeiger verstanden.</label></div></p>
<pre><code class="language-cpp">v = new double[length+1];
</code></pre>
<p>Warum schon wieder 1 mehr als nötig?</p>
<pre><code class="language-cpp">for(int i=0; i&lt;length; i++)
        {
            v[i] = vec[i];
        }
</code></pre>
<p>Tipp: <code>std::copy</code></p>
<pre><code class="language-cpp">}

    myVec operator = (myVec&amp; vec)          //Überladung des =
</code></pre>
<p><code>const</code> fehlt. Der Rückgabetyp sollte eine Referenz sein.</p>
<pre><code class="language-cpp">{
        if(&amp;vec != this)
        {
            delete v;
</code></pre>
<p><code>delete</code> passt nicht zu <code>new[]</code> .</p>
<pre><code class="language-cpp">length = vec.length;
            v = new double[length+1];
</code></pre>
<p>Schon wieder 1 mehr.</p>
<pre><code class="language-cpp">for(int i=0; i&lt;length; i++)
            {
                v[i] = vec.v[i];
            }
        }

    return *this;
    }   
};

int main()
{
    myVec vec1;

    vec1 = {1,2,3,4,5};
</code></pre>
<p>Das geht in C++11 mit <code>initializer_list</code> . Du hast aber wahrscheinlich keinen Compiler, der das kann.</p>
<pre><code class="language-cpp">system(&quot;pause&quot;);
return 0;
}
</code></pre>
<p>Warum hast du die Fehlermeldung nicht angegeben?</p>
<p>Eine Alternative sieht so aus:</p>
<pre><code class="language-cpp">const double args[] = {1, 2, 3};
std::vector&lt;double&gt; v(args, args + 3);
</code></pre>
<p>Das kannst du nachbauen, wenn du Iteratoren verstanden hast.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2161965</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2161965</guid><dc:creator><![CDATA[TyRoXx]]></dc:creator><pubDate>Thu, 29 Dec 2011 20:04:34 GMT</pubDate></item><item><title><![CDATA[Reply to Wie kann ich hier das Array mit Werte initialisieren? on Thu, 29 Dec 2011 21:39:07 GMT]]></title><description><![CDATA[<p>Eine minimale Version könnte ungefähr so aussehen.</p>
<pre><code class="language-cpp">#include &lt;algorithm&gt;
#include &lt;initializer_list&gt;
#include &lt;memory&gt;
#include &lt;utility&gt;

#ifdef _MSC_VER
#define noexcept
#endif

class myVec
{
public:
    typedef double value_type;
    typedef unsigned size_type;
    // construct/assign/destroy
    myVec() noexcept                                                                  // default
        : data_(), size_()
    {}

    myVec(const myVec&amp; other)                                                         // copy
        : data_( new value_type[other.size_] ), size_( other.size_ )
    {
        std::copy( other.data_.get(), other.data_.get() + other.size_, data_.get() );
    }

    myVec(myVec&amp;&amp; other) noexcept                                                     // move
        : data_( std::move( other.data_ ) ), size_( other.size_ )
    {
        other.size_ = 0;
    }

    myVec(std::initializer_list&lt;value_type&gt; l)                                        // list initialization (1)
        : data_( new value_type[l.size()] ), size_( l.size() )
    {
        std::copy( l.begin(), l.end(), data_.get() );
    }
/*
    template&lt;typename... T&gt;
    myVec(T&amp;&amp;... arg)                                                                 // list initialization (2)
        : data_( new value_type[sizeof...(arg)]{ ( std::forward&lt;T&gt;( arg ) )... } ), size_( sizeof...(arg) )
    {
    }
*/ 
    myVec&amp; operator=(const myVec&amp; rhs)                                                // copy assign
    {
        myVec( rhs ).swap( *this );              // copy&amp;swap
        return *this;
    }

    myVec&amp; operator=(myVec&amp;&amp; rhs) noexcept                                            // move assign
    {
        myVec( std::move( rhs ) ).swap( *this ); // move&amp;swap
                                                 // Besser als direktes swap( rhs ), weil so Resourcen bereits innerhalb der Funktion
                                                 // freigegeben werden und nicht erst, wenn irgendwann mal der Destruktor des
                                                 // Arguments aufgerufen wird. (der Move-Konstruktoraufruf kann nicht per 12.8/31 &quot;wegoptimiert&quot; werden)
        return *this;
    }

//  ~myVec_msvc() = default;                                                          // destroy

    // swap
    void swap(myVec&amp; other) noexcept
    {
        using std::swap;
        swap( data_, other.data_ );
        swap( size_, other.size_ );
    }
private:
    std::unique_ptr&lt;value_type[]&gt; data_;
    size_type size_;
};
</code></pre>
<p>Wobei Visual C++ 2010 List-Initialisierung noch nicht beherrscht - die erste Variante kompiliert zwar, wird aber nicht benutzt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2161967</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2161967</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Thu, 29 Dec 2011 21:39:07 GMT</pubDate></item><item><title><![CDATA[Reply to Wie kann ich hier das Array mit Werte initialisieren? on Thu, 29 Dec 2011 20:09:38 GMT]]></title><description><![CDATA[<p>jetzt muss ich aber mal nachfragen, bin ja nicht einer derer die den neuen std sofort schlucken und alles ausprobieren (ja msvc user :D)</p>
<p>was ist eigentlich der ganze move kram? und rvalue referenzen und so?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2161970</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2161970</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Thu, 29 Dec 2011 20:09:38 GMT</pubDate></item><item><title><![CDATA[Reply to Wie kann ich hier das Array mit Werte initialisieren? on Thu, 29 Dec 2011 20:22:36 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/6642">@camper</a>: ist noexcept nicht dasselbe wie throw() und damit schlecht weil langsam?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2161977</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2161977</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Thu, 29 Dec 2011 20:22:36 GMT</pubDate></item><item><title><![CDATA[Reply to Wie kann ich hier das Array mit Werte initialisieren? on Thu, 29 Dec 2011 20:39:31 GMT]]></title><description><![CDATA[<p>Und deine beiden op ='s kannst du durch diesen hier ersetzen:</p>
<pre><code class="language-cpp">myVec&amp; operator = (myVec other) //noexcept?
{
    swap(other);
    return *this;
}
</code></pre>
<p>Bin mir nur gerade nicht sicher, ob noexcept auch fürs Kopieren der Argumente gilt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2161979</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2161979</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Thu, 29 Dec 2011 20:39:31 GMT</pubDate></item><item><title><![CDATA[Reply to Wie kann ich hier das Array mit Werte initialisieren? on Thu, 29 Dec 2011 22:30:52 GMT]]></title><description><![CDATA[<p>314159265358979 schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/6642">@camper</a>: ist noexcept nicht dasselbe wie throw() und damit schlecht weil langsam?</p>
</blockquote>
<p>Es hat den gleichen Effekt wie throw(). Das bedeutet alleridngs nicht per se, dass sich die Programmgeschwindigkeit dadurch ändern muss (positiv oder negativ). Neben anderen Änderungen verursacht in diesem Fall das Werfen einer Exception nicht mehr den Aufruf von unexpected, vielmehr wird terminate direkt aufgerufen, und es steht der Implementation frei, den Stack nur partiell oder sogar gar nicht aufzuräumen.</p>
<p>Viel wichtiger allerdings ist, dass diese Exceptionspezifikationen zwingend benötigt werden, sobald Algorithmen und Move-Semantik im Spiel ist.<br />
Betrachte:</p>
<pre><code class="language-cpp">#include &lt;vector&gt;
#include &lt;assert&gt;

using std::vector;

struct Foo
{
    Foo(const Foo&amp;); // wirft evtl.
    Foo(Foo&amp;&amp;);      // wirft evtl.
};

struct Bar
{
    Bar(const Bar&amp;); // wirft evtl.
    Bar(Bar&amp;&amp;);
};

int main()
{
    vector&lt;Foo&gt; vfoo(10);
    assert(vfoo.capacity()==10);
    vfoo.push_back(Foo());   // Reallokation 10x kopieren + 1x hinzufügen 
    vector&lt;Bar&gt; vbar(10);
    assert(vbar.capacity()==10);
    vbar.push_back(Bar());   // Reallokation 10x move + 1x hinzufügen 
};
</code></pre>
<p>Im Gegensatz zu den alten Exceptionspezifikationen kann getestet werden, ob ein Ausdruck möglicherweise eine Exception werfen darf, und anhand des Ergebnisses kann man dann ggf. die optimale Implementation eines Algorithmus auswählen.<br />
Die Art der Deklaration ist dafür irrelevant</p>
<pre><code class="language-cpp">void foo() throw()
void foo() noexcept
void foo() noexcept(true)
</code></pre>
<p>sind identisch. Man kann dann in Templates auch noch schlauer sein</p>
<pre><code class="language-cpp">template &lt;typename T&gt;
struct Foo
{
    void foo() noexcept(noexcept(declval&lt;T&gt;().do_something())) // foo ist noexcept, falls der Ausdruck declval&lt;T&gt;().do_something() keine Exception werfen darf - also die Funktion do_something für unser T noexcept ist

//                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^  noexcept-Ausdruck ergibt true oder false

//             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ noexcept-Spezifikation
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2161986</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2161986</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Thu, 29 Dec 2011 22:30:52 GMT</pubDate></item><item><title><![CDATA[Reply to Wie kann ich hier das Array mit Werte initialisieren? on Thu, 29 Dec 2011 21:18:57 GMT]]></title><description><![CDATA[<p>wie schonmal gefragt: was zum teufel ist diese move semantik?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2161988</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2161988</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Thu, 29 Dec 2011 21:18:57 GMT</pubDate></item><item><title><![CDATA[Reply to Wie kann ich hier das Array mit Werte initialisieren? on Thu, 29 Dec 2011 21:27:06 GMT]]></title><description><![CDATA[<p>Lies einmal das hier, sowie die nachfolgenden Teile: <a href="http://cpp-next.com/archive/2009/08/want-speed-pass-by-value/" rel="nofollow">http://cpp-next.com/archive/2009/08/want-speed-pass-by-value/</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2161991</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2161991</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Thu, 29 Dec 2011 21:27:06 GMT</pubDate></item><item><title><![CDATA[Reply to Wie kann ich hier das Array mit Werte initialisieren? on Thu, 29 Dec 2011 22:05:27 GMT]]></title><description><![CDATA[<p>Skym0sh0 schrieb:</p>
<blockquote>
<p>wie schonmal gefragt: was zum teufel ist diese move semantik?</p>
</blockquote>
<p>Eine Move-Operation ist eine Operation, bei der der Wert des Operaden destruktiv in ein Zielobjekt transferiert wird. Der Clou dabei ist, dass in vielen Fällen eine <em>logische konstante Copy-Operation</em> (bei der ein Duplikat der Ursprungsdaten erzeugt wird) durch eine solche Move-Operation ersetzt werden kann. Nämlich immer dann, wenn das Ursprungsobjekt nach der Kopieroperation nicht mehr weiter verwendet wird, in diesem Fall wird nämlich die durch das Move bedingte Veränderung des Ursprungsobjektes im Programm gar nicht bemerkt werden. Solche Objekte gibt es in C++ viele: immer dann wenn ein temporäres Objekt erzeugt wird (primär: als Rückgabewert einer Funktion) um ein anderes Objekt zu initialisieren. C++03 erlaubt bereits in vielen Fällen die Eliminierung der Kopieraktion (und dann wird nat. auch nicht gemoved), es gibt aber Ausnahmen, bei denen das nicht möglich ist. Auch bei Zuweisungen ist die Eliminierung i.d.R. nicht möglich.<br />
Move-Semantik in C++11 erlaubt es, für einen bestimmten Typen zu definieren, wie eine Move-Operation auszuführen ist, und anhand der Eigenart des Argumentes (move-Kandidat oder nicht: d.h. lvalue oder rvalue) Funktionen zu überladen.</p>
<p>Für die wichtigsten Hintergründe kann man sich die ursprünglichen Vorschlähge für die Standarderweiterungen anschauen:<br />
<a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2002/n1377.htm" rel="nofollow">A Proposal to Add Move Semantics Support to the C++ Language</a><br />
<a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1690.html" rel="nofollow">A Proposal to Add an Rvalue Reference to the C++ Language</a><br />
Wobei ich darauf hinweise, dass es bis zur finalen Form noch erhebliche Änderungen gegeben hat. Spätere paper befassen sich allerdings nicht mehr mit dem Warum.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2162001</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2162001</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Thu, 29 Dec 2011 22:05:27 GMT</pubDate></item></channel></rss>