 |
C++Talk.NET C++ language newsgroups
|
| View previous topic :: View next topic |
| Author |
Message |
Andreas Schibilla Guest
|
Posted: Sat May 29, 2004 1:23 pm Post subject: Strukturen als Funktionsergebnis |
|
|
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
|
Posted: Sun May 30, 2004 3:45 pm Post subject: Re: Strukturen als Funktionsergebnis |
|
|
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
|
Posted: Sun May 30, 2004 4:51 pm Post subject: Re: Strukturen als Funktionsergebnis |
|
|
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
|
Posted: Sun May 30, 2004 5:48 pm Post subject: Re: Strukturen als Funktionsergebnis |
|
|
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 .
| 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)
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 .
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
|
Posted: Sun May 30, 2004 6:40 pm Post subject: Re: Strukturen als Funktionsergebnis |
|
|
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
|
Posted: Mon May 31, 2004 9:11 am Post subject: Re: Strukturen als Funktionsergebnis |
|
|
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 .
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
|
Posted: Mon May 31, 2004 10:07 am Post subject: Re: Strukturen als Funktionsergebnis |
|
|
Vielen Dank für eure Antworten!
Ich werde das Buch jetzt verbrennen )
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
|
Posted: Mon May 31, 2004 12:43 pm Post subject: Re: Strukturen als Funktionsergebnis |
|
|
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 .
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
|
Posted: Mon May 31, 2004 2:20 pm Post subject: Re: Strukturen als Funktionsergebnis |
|
|
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 .
|
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
|
Posted: Mon May 31, 2004 4:07 pm Post subject: Re: Strukturen als Funktionsergebnis |
|
|
| 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
|
Posted: Wed Jun 02, 2004 5:05 pm Post subject: Re: Strukturen als Funktionsergebnis |
|
|
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 ?
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
|
Posted: Mon Jun 07, 2004 12:02 pm Post subject: Re: Strukturen als Funktionsergebnis |
|
|
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
|
Posted: Mon Jun 07, 2004 12:54 pm Post subject: Re: Strukturen als Funktionsergebnis |
|
|
"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
|
Posted: Mon Jun 07, 2004 1:45 pm Post subject: Re: Strukturen als Funktionsergebnis |
|
|
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 |
|
 |
|
|
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
|
|