C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Strukturen als Funktionsergebnis

 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (German)
View previous topic :: View next topic  
Author Message
Andreas Schibilla
Guest





PostPosted: Sat May 29, 2004 1:23 pm    Post subject: Strukturen als Funktionsergebnis Reply with quote



Hallo alle zusammen,


ich habe in meinem Visual C++ Projekt folgenden Typen erstellt:


typedef struct
{
double x, y, z;

} TVektor;


Nun habe ich eine Funktion geschrieben:

TVektor vektorSkalarMul(TVektor v, double d)
{
TVektor res = v;
res.x *= d;
res.y *= d;
res.z *= d;
return res;
}


Das Kompilieren klappt wunderbar, auch der Aufruf der Funktion klappt prima.
Allerdings habe ich in einem Buch gelesen, dass Funktionen keine Strukturen
zurückgeben dürfen.
Da das aber ohne Probleme durchläuft, bin ich etwas verwirrt...
Weiß jemand genaueres? Ist die Funktion ungültig? Muss ich doch mit Zeigern
arbeiten??

Schöne Grüße und vielen Dank,

Andi
--
---------------------------------------
There are only 10 types of people in the world:
Those who understand binary and those who don't.

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
Back to top
Frank Fischer
Guest





PostPosted: Sun May 30, 2004 3:45 pm    Post subject: Re: Strukturen als Funktionsergebnis Reply with quote



On 2004-05-29, Andreas Schibilla <andi (AT) as3 (DOT) de> wrote:
Quote:
typedef struct
{
double x, y, z;

} TVektor;
[...]
TVektor vektorSkalarMul(TVektor v, double d)
{
TVektor res = v;
res.x *= d;
res.y *= d;
res.z *= d;
return res;
}

[...]
Weiß jemand genaueres? Ist die Funktion ungültig? Muss ich doch mit Zeigern
arbeiten??
Wie das ANSI-C aussieht, da bin ich mir nicht ganz sicher. Aber du

arbeitest ja offenbar unter C++. AFAIK ist in C++ ein "struct" nichts
anderes als ein "class" (mal von den default Zugriffsrechten abgesehen).
Und Objekte, also Instanzen einer Klasse, dürfen sehr wohl zurückgegeben
werden. Dabei wird in der aufrufenden Funktionen mittels
Copy-Konstruktor oder Zuweisungsoperater eine Kopie des zurückgegebenen
Objekts erstellt. Ist, wie in diesem Beispiel, kein expliziter
Copy-Konstruktor bzw. Zuweisungsoperator definiert, so wird die
entsprechende Defaultimplementierung gewählt, welche wahrscheinlich
nichts anderes macht, als alle Datenfelder zu kopieren.
In C++ ist dieses Beispiel also durchaus gültig, wenn ich nicht irre.

Gruß,
Frank

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
Rolf Magnus
Guest





PostPosted: Sun May 30, 2004 4:51 pm    Post subject: Re: Strukturen als Funktionsergebnis Reply with quote



Andreas Schibilla wrote:

Quote:
Hallo alle zusammen,


ich habe in meinem Visual C++ Projekt folgenden Typen erstellt:


typedef struct
{
double x, y, z;

} TVektor;

Der typedef ist unnötig. Schreibe einfach:

struct TVektor
{
double x, y, z;
};

Quote:
Nun habe ich eine Funktion geschrieben:

TVektor vektorSkalarMul(TVektor v, double d)
{
TVektor res = v;
res.x *= d;
res.y *= d;
res.z *= d;
return res;
}

Das ist recht umständlich. Die Kopie von v nach res kannst du dir
sparen, da du den Vektor an die Funktion bereits per Kopie übergeben
hast. Du kannst also direkt v modifizieren und zurückgeben.

Quote:
Das Kompilieren klappt wunderbar, auch der Aufruf der Funktion klappt
prima. Allerdings habe ich in einem Buch gelesen, dass Funktionen
keine Strukturen zurückgeben dürfen.

Wirf es weg, denn das, was du da gelesen hast, ist Quatsch.

Quote:
Da das aber ohne Probleme durchläuft, bin ich etwas verwirrt...
Weiß jemand genaueres? Ist die Funktion ungültig? Muss ich doch mit
Zeigern arbeiten??

Nein. Die Funktion ist in Ordnung.

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
Marco Budde
Guest





PostPosted: Sun May 30, 2004 5:48 pm    Post subject: Re: Strukturen als Funktionsergebnis Reply with quote

Andreas Schibilla wrote:

Quote:
ich habe in meinem Visual C++ Projekt folgenden Typen erstellt:

Welchen Compiler Du benutzt, ist völlig egal, da es hier
um ANSI C++ geht Smile.

Quote:
typedef struct
{
double x, y, z;

} TVektor;

Das ist C, aber kein C++. Du meinst:

struct TVektor
{
double x, y, z;
};

Quote:
TVektor vektorSkalarMul(TVektor v, double d)

Das ist extem ineffizient. Deine Variable "v" wird als Kopie übergeben.
Das macht man eigentlich nie. Du möchtest sie als konstante Referenz
übergeben:

TVektor vektorSkalarMul (const TVektor &v, double d)

Quote:
TVektor res = v;

Hier erzeugst Du schon wieder eine Kopie, die Du danach gleich wieder
überschreibst. Unsinnig.

Quote:
res.x *= d;
res.y *= d;
res.z *= d;

return res;

Hier wird wieder eine Kopie erzeugt.

Quote:
Das Kompilieren klappt wunderbar, auch der Aufruf der Funktion klappt prima.

Ist aber total lahm. Besser wäre:

void vektorSkalarMul (const TVektor &v, double d, TVektor &res)
{
res.x = v.x * d;
res.y = v.y * d;
res.z = v.z * d;
}

Hier erzeugt der Aufrufer das Ergebnis Objekt. Dieses kann dann auch
immer weiter benutzt werden.

Nebenbei: in C++ solltest Du Dich mal mit dem Thema Überladen von
Operatoren beschäftigen.


Quote:
Allerdings habe ich in einem Buch gelesen, dass Funktionen keine Strukturen
zurückgeben dürfen.
Da das aber ohne Probleme durchläuft, bin ich etwas verwirrt...
Weiß jemand genaueres? Ist die Funktion ungültig?

Ja.

Quote:
Muss ich doch mit Zeigern
arbeiten??

Zeiger braucht man in C++ eher selten, Referenzen dafür fast immer Smile.

cu, Marco

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
Christoph Rabel
Guest





PostPosted: Sun May 30, 2004 6:40 pm    Post subject: Re: Strukturen als Funktionsergebnis Reply with quote

Frank Fischer wrote:
Quote:
On 2004-05-29, Andreas Schibilla <andi (AT) as3 (DOT) de> wrote:
[...]
Weiß jemand genaueres? Ist die Funktion ungültig? Muss ich doch mit Zeigern
arbeiten??

Wie das ANSI-C aussieht, da bin ich mir nicht ganz sicher.

Auch in C ist der Code legal und korrekt.
Das Buch irrt also in jedem Fall.

mfg

Christoph

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
Rolf Magnus
Guest





PostPosted: Mon May 31, 2004 9:11 am    Post subject: Re: Strukturen als Funktionsergebnis Reply with quote

Marco Budde wrote:

Quote:
Andreas Schibilla wrote:

ich habe in meinem Visual C++ Projekt folgenden Typen erstellt:

Welchen Compiler Du benutzt, ist völlig egal, da es hier
um ANSI C++ geht Smile.

typedef struct
{
double x, y, z;

} TVektor;

Das ist C, aber kein C++.

Doch, das ist auch C++. Man schreibt das zwar in C++ normalerweise nicht
so (außer evtl., wenn es Teil eines Interface ist, das auch von C aus
nutzbar sein soll), aber es ist troztdem gültiges C++.

Quote:
Du meinst:

struct TVektor
{
double x, y, z;
};

TVektor vektorSkalarMul(TVektor v, double d)

Das ist extem ineffizient. Deine Variable "v" wird als Kopie
übergeben. Das macht man eigentlich nie. Du möchtest sie als konstante
Referenz übergeben:

TVektor vektorSkalarMul (const TVektor &v, double d)

Er kopiert sie doch sowieso. Er muß eigentlich nur die zweite Kopie
weglassen.

Quote:
TVektor res = v;

Hier erzeugst Du schon wieder eine Kopie, die Du danach gleich wieder
überschreibst. Unsinnig.

Mit einer const-Referenz müßte er diese Kopie ja auch machen, da er
sonst das Original zu überschreiben versuchen würde.

Quote:
res.x *= d;
res.y *= d;
res.z *= d;

return res;

Hier wird wieder eine Kopie erzeugt.

Bei modernen Compilern nicht.

Quote:
Das Kompilieren klappt wunderbar, auch der Aufruf der Funktion klappt
prima.

Ist aber total lahm. Besser wäre:

void vektorSkalarMul (const TVektor &v, double d, TVektor &res)
{
res.x = v.x * d;
res.y = v.y * d;
res.z = v.z * d;
}

Die Übergabe des Zielvektors als Parameter muß nicht unbedingt schneller
sein.
Eine andere Möglichkeit wäre natürlich auch, das Original direkt zu
verändern und den Aufrufer vorher die Kopie machen zu lassen, falls er
das Original noch braucht. Das würde man dann sinnigerweise auch gleich
in eine Memberfunktion verpacken und einen Operator draus machen, der
Art:

TVektor& TVektor::operator*=(double d)
{
x *= d;
y *= d;
z *= d;
return *this;
}

Und noch gleich mit Kopie eingebaut:

TVektor& TVektor::operator*(double d)
{
return TVektor(*this) *= d;
}

Quote:
Allerdings habe ich in einem Buch gelesen, dass Funktionen keine
Strukturen zurückgeben dürfen.
Da das aber ohne Probleme durchläuft, bin ich etwas verwirrt...
Weiß jemand genaueres? Ist die Funktion ungültig?

Ja.

Nein.

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
Andreas Schibilla
Guest





PostPosted: Mon May 31, 2004 10:07 am    Post subject: Re: Strukturen als Funktionsergebnis Reply with quote

Vielen Dank für eure Antworten!
Ich werde das Buch jetzt verbrennen Smile)

Schöne Grüße,

Andi

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
Back to top
Marco Budde
Guest





PostPosted: Mon May 31, 2004 12:43 pm    Post subject: Re: Strukturen als Funktionsergebnis Reply with quote

Rolf Magnus wrote:

Quote:
Das ist C, aber kein C++.
Doch, das ist auch C++.

Da C++ C enthält, stimmt das natürlich fast immer. Als C++ Code
würde ich das trotzdem nicht bezeichnen.

Quote:
Man schreibt das zwar in C++ normalerweise nicht
so

Eben, das wollte ich damit sagen.

Quote:
Er kopiert sie doch sowieso.

Bei der ganzen Funktion muß aber nirgendwo kopiert werden.

Quote:
Hier erzeugst Du schon wieder eine Kopie, die Du danach gleich wieder
überschreibst. Unsinnig.
Mit einer const-Referenz müßte er diese Kopie ja auch machen, da er
sonst das Original zu überschreiben versuchen würde.

??? Das Ergebis landet sowieso in einem anderen Objekt. Ich sehe nicht,
wo bei "x = y * z" irgendwo eine Kopie erzeugt werden muß.

Quote:
Die Übergabe des Zielvektors als Parameter muß nicht unbedingt schneller
sein.

Auf jeden Fall muß das nie langsamer sein und kann schneller sein.
Die Rückgabe von Objekten als Kopie würde ich in 99,9% der Fälle
als Designfehler betrachten.

Quote:
Eine andere Möglichkeit wäre natürlich auch, das Original direkt zu
verändern

Sowas ist nicht sehr universell und IHMO auch ziemlich unübersichtlich.

Quote:
TVektor& TVektor::operator*=(double d)
{
x *= d;
y *= d;
z *= d;
return *this;
}

Das ist natürlich die richtige C++ Lösung Smile.

cu, Marco

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
Rolf Magnus
Guest





PostPosted: Mon May 31, 2004 2:20 pm    Post subject: Re: Strukturen als Funktionsergebnis Reply with quote

Marco Budde wrote:

Quote:
Rolf Magnus wrote:

Das ist C, aber kein C++.
Doch, das ist auch C++.

Da C++ C enthält, stimmt das natürlich fast immer. Als C++ Code
würde ich das trotzdem nicht bezeichnen.

Man schreibt das zwar in C++ normalerweise nicht
so

Eben, das wollte ich damit sagen.

Er kopiert sie doch sowieso.

Bei der ganzen Funktion muß aber nirgendwo kopiert werden.

Doch, sofern ich nicht das Original-Objekt überschreiben will.

Quote:
Hier erzeugst Du schon wieder eine Kopie, die Du danach gleich wieder
überschreibst. Unsinnig.
Mit einer const-Referenz müßte er diese Kopie ja auch machen, da er
sonst das Original zu überschreiben versuchen würde.

??? Das Ergebis landet sowieso in einem anderen Objekt.

Es landet in eben dieser Kopie.

Quote:
Ich sehe nicht, wo bei "x = y * z" irgendwo eine Kopie erzeugt werden
muß.

y wird nach x kopiert, dann wird z damit multipliziert. Es ist also das
selbe wie:

x = y;
x *= z;

So wird es bei vielen Klassen gemacht.

Quote:
Die Übergabe des Zielvektors als Parameter muß nicht unbedingt
schneller sein.

Auf jeden Fall muß das nie langsamer sein und kann schneller sein.

Es verträgt sich aber nicht mit den von dir empfohlenen Operatoren.
Außerdem ist es umständlicher zu schreiben.
Denke nur mal an:

class Shape
{
Color getColor() const; { return thecolor_;)
};

....
shape1->setColor(shape2->color());

im Gegensatz zu:

class Shape
{
void getColor(Color& color) const { color = thecolor_; }
}

....
Color color;
shape1->getColor(color);
shape2->setColor(color);

Die zweite Variante ist umständlicher zu schreiben, sieht häßlich aus
und ist zudem mit hoher Wahrscheinlichkeit sogar langsamer, da hier das
Objekt zuerst defaultkonstruiert und dann wieder überschrieben werden
muß.

Quote:
Die Rückgabe von Objekten als Kopie würde ich in 99,9% der Fälle
als Designfehler betrachten.

Dann solltest du dir selbst nochmal Operatoren ansehen.

Quote:
Eine andere Möglichkeit wäre natürlich auch, das Original direkt zu
verändern

Sowas ist nicht sehr universell und IHMO auch ziemlich
unübersichtlich.

Wieso?

Quote:

TVektor& TVektor::operator*=(double d)
{
x *= d;
y *= d;
z *= d;
return *this;
}

Das ist natürlich die richtige C++ Lösung Smile.

Aber es ist genau das, was du oben als "nicht sehr universell und IMHO
auch ziemlich unübersichtlich" bezeichnest.

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
Ullrich Praetz
Guest





PostPosted: Mon May 31, 2004 4:07 pm    Post subject: Re: Strukturen als Funktionsergebnis Reply with quote

Quote:

class Shape
{
void getColor(Color& color) const { color = thecolor_; }
}

...
Color color;
shape1->getColor(color);
shape2->setColor(color);

Die zweite Variante ist umständlicher zu schreiben, sieht häßlich aus
und ist zudem mit hoher Wahrscheinlichkeit sogar langsamer, da hier das
Objekt zuerst defaultkonstruiert und dann wieder überschrieben werden
muß.

Ich denke, dass man in den meisten Fällen auf eine Rückgabe per Kopie
verzichten sollte. Sinn macht das eigtlich nur bei einfachen Datentypen.
Der Verwendung von Referenzen auf obigen Fall kommt komplett ohne Kopieen
aus und sieht, konsequent angewendet, folgendermaßen aus:

class Shape
{
const Color& getColor() const { return thecolor_; }
}

....
shape2->setColor(shape2->getColor());

Gruß Ulli

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
Marco Budde
Guest





PostPosted: Wed Jun 02, 2004 5:05 pm    Post subject: Re: Strukturen als Funktionsergebnis Reply with quote

Rolf Magnus wrote:

Quote:
Bei der ganzen Funktion muß aber nirgendwo kopiert werden.
Doch, sofern ich nicht das Original-Objekt überschreiben will.

Wo wird bei "x = y * z" kopiert?

Quote:
Es landet in eben dieser Kopie.

Das Ergebnis Objekt muß nicht initialisiert (== kopiert)
werden.

Quote:
y wird nach x kopiert,

Nö.

Quote:
x = y;
x *= z;

So wird es bei vielen Klassen gemacht.

Warum haben viele Klassen nur den "*" und den "*=" Operator Smile?
Und bei beiden müssen keine Kopien erzeugt werden.

Quote:
Denke nur mal an:

class Shape
{
Color getColor() const; { return thecolor_;)
};

Daran denke ich nicht, da das ein Designfehler ist. Das würde ich
eher so implementieren:

const Color &getColor() const; { return thecolor_;)

Solange man konstante Referenzen zurückgeben kann, weil die Klasse
die Daten vorhält, ist IHMO genau das der richtige Weg. Will man
ein temporäres Ergebnis zurückliefern, würde ich fast immer
variable Parameter wählen.

Quote:
Die zweite Variante ist umständlicher zu schreiben, sieht häßlich aus

Darüber kann man sich streiten. Ich stehe eher auf kurze Zeilen,
mit wenigen Klammern.

Quote:
und ist zudem mit hoher Wahrscheinlichkeit sogar langsamer, da hier das
Objekt zuerst defaultkonstruiert und dann wieder überschrieben werden
muß.

Das hängt sehr stark von der Klasse ab. Nebenbei muß das Objekt genau
einmal zur Laufzeit erzeugt werden und kann das immer wieder
verwendet werden. Genau das geht bei der Kopievariante eben nicht.

Quote:
Aber es ist genau das, was du oben als "nicht sehr universell und IMHO
auch ziemlich unübersichtlich" bezeichnest.

Vielleicht haben wir uns falsch verstanden: was ich meinte war das
Verändern von Parametern und nicht das Verändern von Member Variablen.

cu, Marco

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
Olaf Krzikalla
Guest





PostPosted: Mon Jun 07, 2004 12:02 pm    Post subject: Re: Strukturen als Funktionsergebnis Reply with quote

Hi,

Marco Budde schrieb:
Quote:
Die Rückgabe von Objekten als Kopie würde ich in 99,9% der Fälle
als Designfehler betrachten.
Unsinn. A priori werden Objekte als Kopie zurückgegeben - modulo hier

nicht näher zu betrachtenden Optimierungen. Aber selbst, wenn mit
'Objekten' nur komplexe Objekte gemeint sind, wären Funktionssignaturen
wie

std::string foo();
std::list<std::vector bar();

kein Designfehler. Hierbei handelt es sich lediglich um einen
technischen Fehler, der aber aus einer Unzulänglichkeit (man könnte auch
'Designfehler' sagen) der Sprache C++ herrührt: flache Kopien werden
nicht unterstützt.
Nichtsdestotrotz ist im konkreten Fall sowohl die Übergabe als auch die
Rückgabe von TVektor als Kopie vollkommen in Ordnung, da das Programm
dadurch lesbarer und auch nicht wirklich langsamer wird (das Problem
default c'tor wurde schon angesprochen).
Einzig die zusätzliche temporäre Varibale sollte man weglassen und
stattdessen dann gleich auf dem Argument operieren.


MfG
Olaf Krzikalla

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
Markus Schaaf
Guest





PostPosted: Mon Jun 07, 2004 12:54 pm    Post subject: Re: Strukturen als Funktionsergebnis Reply with quote

"Olaf Krzikalla" <Entwicklung (AT) reico (DOT) de> schrieb:

Quote:
Marco Budde schrieb:
Die Rückgabe von Objekten als Kopie würde ich in 99,9% der Fälle
als Designfehler betrachten.

Unsinn. [...] Hierbei handelt es sich lediglich um einen
technischen Fehler, der aber aus einer Unzulänglichkeit (man könnte auch
'Designfehler' sagen) der Sprache C++ herrührt:

Ihr widersprecht euch gar nicht.

Quote:
flache Kopien werden nicht unterstützt.

Das ist falsch. Flache Kopien sind sogar das einzige, was die
Sprache anbietet. Alles andere muß man selbst programmieren.
Was Du meinst, ist eine Verschiebe-Operation, die zwar die
Speicheradresse ändern kann, aber nicht die Objektidentität.
Und da ist schon das Problem: Speicheradresse und Objekt=
identität sind in C und C++ synonym.

Quote:
Nichtsdestotrotz ist im konkreten Fall sowohl die Übergabe als auch die
Rückgabe von TVektor als Kopie vollkommen in Ordnung, da das Programm
dadurch lesbarer und auch nicht wirklich langsamer wird

Ich weiß nicht, was »TVektor« macht (und ich schaue jetzt auch
nicht nach), aber Std-Container zu kopieren ist wirklich übel,
wenn etwas drin ist (also in den meisten Anwendungsfällen).

Bleibt nur die ewige Anmerkung übrig, daß man praktisch alles,
was einen an einfachen Funktionen stört, mit Klassen beheben
kann.

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
Olaf Krzikalla
Guest





PostPosted: Mon Jun 07, 2004 1:45 pm    Post subject: Re: Strukturen als Funktionsergebnis Reply with quote

Hi,

Markus Schaaf schrieb:
Quote:
flache Kopien werden nicht unterstützt.

Das ist falsch. Flache Kopien sind sogar das einzige, was die
Sprache anbietet. Alles andere muß man selbst programmieren.
Was Du meinst, ist eine Verschiebe-Operation, die zwar die
Speicheradresse ändern kann, aber nicht die Objektidentität.
Und da ist schon das Problem: Speicheradresse und Objekt=
identität sind in C und C++ synonym.
Da hast Du natürlich recht. Da hatte ich vor dem Schreiben schon zwei

Schritte zu weit gedacht.

Quote:
Ich weiß nicht, was »TVektor« macht (und ich schaue jetzt auch
nicht nach), aber Std-Container zu kopieren ist wirklich übel,
wenn etwas drin ist (also in den meisten Anwendungsfällen).
Sicher. Und ich schrieb oben auch, warum. Für eine weitergehende

Diskussion fehlt die Definition von 'Designfehler'.


MfG
Olaf Krzikalla

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (German) All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.