🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: de.comp.lang.c++
Article #296

Re: Typ Konversion

#296
From: Bernd Eggink
Date: Wed, 23 Aug 1995 08:39
48 lines
2278 bytes
Christoph Liebig (chris) wrote:
>  Hallo !

>  Bekanntlich kann man in C++ eigene Typkonversionsoperatoren definieren.
>  Beispielsweise um ein Objekt der Klasse A nach B zu casten, koennte in A der
>  operator B()' definiert werden, der ein B-Objekt zurueckliefern muss.
>  Was bedeutet das fuer das target-Objekt der Klasse A, wenn es nach B gecastet
>  wird ? Wird das Objekt A zerstoert 

Nur wenn Du darauf bestehst. Natuerlich kann die Funktion A::operator B()
eigene Member veraendern oder gar "delete this" aufrufen - sinnvoll ist 
das meist nicht. Vorsichtshalber sollte man sie gleich als const deklarieren.

> -- ich denke nein, und nehme an, dass bei
>  casts sogenannte temporary objects erzeugt werden.
>  Wenn dem so ist,  muesste in operator B() eine neues B Objekt konstruiert
>  werden und ueberdies koennte der operator B() gegebenenfalls als const
>  deklariert werden.

Ob temporaere Objekte erzeugt werden, haengt vom Compiler ab. Es steht ihm
frei, sie in geeigneten Situationen wegzuoptimieren.

Beispiel:

	A	a(4711);
	B	b(a);

Ein schlauer Compiler kann direkt das Objekt b initialisieren, ohne Umweg
ueber eine temporaere Variable.

>  Gibt es dazu naehere Vorschriften oder Konventionen (beispieslweise koennten
>  cast operatoren guenstigerweise nur eine Referenz zurueckliefern) ?

Das mit der Referenz ist sinnvoll, wenn es sich um eine auf das 
A-Objekt selber (bzw. einen Basisteil davon) handelt. Allerdings ist das
dann ein anderer Cast, naemlich operator B&().
Beim Cast Referenzen auf _Member_ zurueckgegeben, ist dagegen natuerlich 
ueberhaupt nicht zu empfehlen.

Gruss
	Bernd

--
+----------------------------------+
|          Bernd Eggink            |
|    Rechenzentrum Uni Hamburg     |
| admin@rzaix13.rrz.uni-hamburg.de |
+----------------------------------+
Technical Details
Message-ID: <41epfm$db3@rzsun02.rrz.uni-hamburg.de>
Path: arc1-ca.pugleaf.net!news.rrz.uni-hamburg.de!rzaix13!admin
References: <41ce20$q0v@rs18.hrz.th-darmstadt.de>

Show Full Headers
Complete Article Headers
Path: arc1-ca.pugleaf.net!news.rrz.uni-hamburg.de!rzaix13!admin
From: admin@rzaix13.uni-hamburg.de (Bernd Eggink)
Newsgroups: de.comp.lang.c++
Subject: Re: Typ Konversion
Date: 23 Aug 1995 08:39:18 GMT
Organization: University of Hamburg -- Germany
Message-ID: <41epfm$db3@rzsun02.rrz.uni-hamburg.de>
References: <41ce20$q0v@rs18.hrz.th-darmstadt.de>
NNTP-Posting-Host: rzaix13.rrz.uni-hamburg.de
X-Newsreader: TIN [version 1.2 PL2]