Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Till

Alter Hase

  • »Till« ist der Autor dieses Themas

Beiträge: 378

Wohnort: Lincoln College, Oxford

Beruf: Student

  • Private Nachricht senden

1

26.11.2004, 12:10

cast-Ergebnis temporär?

Hall Spieleprogrammierer.de-Gemeinde (hier ist im Moment aber wirklich wenig los!), folgende Frage:

wenn ich folgenden Code habe:

C-/C++-Quelltext

1
2
3
4
5
6
...
char **pp = ...;
...
*static_cast<T*>(*pp) = ...;
*pp += sizeof(T);
...


Als Erklärung: "pp" zeigt auf einen Zeiger auf Binärdaten, der bei mir wie ein Dateipositionszeiger wirkt. Nun will ich dereferenzieren, den Pointer-Typ casten in T*(T ist ein template-Parameter) und dann will ich diesen gecasteten Zeiger nochmal dereferenzieren und der resultierenden "Variablen" einen Wert T zuordnen. Das müsste doch eigentlich so funktionieren, oder? (wenn nicht, sagt's bitten!)
SO: nun will ich das alles aber in eine Zeile packen, meine erste Überlegung war natürlich:

C-/C++-Quelltext

1
*(static_cast<T*>(*pp)++) = ...;

weil der gecastete Zeiger dann inkrementiert wird (um die Anzahl der Bytes des Typs T, oder?). Doch wie funktioniert da der cast? Gibt er nur einen T-Zeiger zurück, der temporär erstellt wurde und die post-ink.-Operation bringt gar nichts oder geht es immer noch um den "original" T-Zeiger, der von "pp" dereferenziert wurde (da dies ja mein Positionszeiger ist).

Danke schonmal,
Till
DOMINVS ILLVMINATIO MEA
---
Es lebe unmanaged Code!
---
>> Meine Uni <<

2

27.11.2004, 16:57

Die Cast-Operatoren liefern eine Referenz zurück. Die Cast-Operatoren sind im wesendlichen wie die C-Cast's. Nur etwas sicherer da noch zusätzliche Prüfungen vom Compiler oder sogar während der Laufzeit, vorgenommen werden.
Wichtig! Ich übernehme keinerlei Verantwortung für eventl. Datenverlust oder Schäden am Rechner ;D

Till

Alter Hase

  • »Till« ist der Autor dieses Themas

Beiträge: 378

Wohnort: Lincoln College, Oxford

Beruf: Student

  • Private Nachricht senden

3

27.11.2004, 19:12

also in diesem Fall wie etwa eine "Referenz auf einen Zeiger", obwohl es sowas eigentlich gar nicht gibt...(das ist sehr gut für meinen Fall ;) )

OK, dann vielen Dank (tja, DragonMaster hilft hier einfach immer :) )
DOMINVS ILLVMINATIO MEA
---
Es lebe unmanaged Code!
---
>> Meine Uni <<

4

28.11.2004, 18:27

Zitat

"Referenz auf einen Zeiger", obwohl es sowas eigentlich gar nicht gibt
??? Natürlich gibbet Referenzen auf einen Zeiger ;)

C-/C++-Quelltext

1
2
3
4
void foo(int*& i)
{
   i = new int(0);
}

Als einfaches Beispielt.
Wichtig! Ich übernehme keinerlei Verantwortung für eventl. Datenverlust oder Schäden am Rechner ;D

Till

Alter Hase

  • »Till« ist der Autor dieses Themas

Beiträge: 378

Wohnort: Lincoln College, Oxford

Beruf: Student

  • Private Nachricht senden

5

28.11.2004, 19:00

:rolleyes: ohh...tatsächlich (dachte, ich hätte irgendwo gelesen, dass das nicht geht...) :angel:
DOMINVS ILLVMINATIO MEA
---
Es lebe unmanaged Code!
---
>> Meine Uni <<

helium

Treue Seele

Beiträge: 180

Wohnort: NRW, Burscheid (nahe Köln)

  • Private Nachricht senden

6

30.11.2004, 18:20

Hast dich vielleicht vertan: Es gibt keine Zeiger auf Referenzen.

Till

Alter Hase

  • »Till« ist der Autor dieses Themas

Beiträge: 378

Wohnort: Lincoln College, Oxford

Beruf: Student

  • Private Nachricht senden

7

30.11.2004, 19:56

:rolleyes: jajaja, hab's ja begriffen... :wirbel: war irgendwie eine Fehlspeicherung im Hirn (vielleicht hat ein veralteter Pointer bei den Neuronen was Falsches reingeschrieben... :) ), oder das Buch, wo ich dachte, es gelesen zu haben, scheint irgendwie seinen Inhalt geändert zu haben... :) :rolleyes:
DOMINVS ILLVMINATIO MEA
---
Es lebe unmanaged Code!
---
>> Meine Uni <<

Dave

Alter Hase

Beiträge: 757

Wohnort: Berlin

  • Private Nachricht senden

8

30.11.2004, 20:35

oder es gab nen dicken null-pointer-fehler *g*

Werbeanzeige