PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : C++: Komische Code-Zeile entdeckt; brauche Hilfe zum verstehen


Elemental
2005-08-29, 12:21:28
Hallo allerseits,
bin gerade dabei mich in ein grösseres Projekt einzuarbeiten und schau mir gerade etwas Code an.

Dabei bin ich auf diese Stilblüte gestossen:

CStationData* pStationData = pStationData = pLaneData->GetTransmittedDownloadDataPtr();


Ich versteh grad überhaupt nicht, was das soll. Was passiert denn da?


mfG
Elemental

Senior Sanchez
2005-08-29, 12:29:50
Hallo allerseits,
bin gerade dabei mich in ein grösseres Projekt einzuarbeiten und schau mir gerade etwas Code an.

Dabei bin ich auf diese Stilblüte gestossen:

CStationData* pStationData = pStationData = pLaneData->GetTransmittedDownloadDataPtr();


Ich versteh grad überhaupt nicht, was das soll. Was passiert denn da?


mfG
Elemental

Auf dem Zeiger pLaneData wird die Methode GetTransmittedDownloadDataPtr() aufgerufen. Die gibt als Rückgabewert einen Zeiger zurück der daraufhin den Zeiger pStationData des Typs CStationData initialisiert.
Wobei natürlich diese doppelte Zuweisung an ein und denselben Zeiger blödsinnig ist, wie ich finde oder ich verstehe etwas falsch *g*

Elemental
2005-08-29, 12:34:13
Na gerade diese "doppelte Zuweisung" versteh ich auch nicht...

Ganon
2005-08-29, 12:43:26
Würde ich mal als "Tipp"-Fehler einordnen. ;) Aber vielleicht hat ja jemand anders noch ne Idee. ;)

micki
2005-08-29, 13:21:49
Würde ich mal als "Tipp"-Fehler einordnen. ;) Aber vielleicht hat ja jemand anders noch ne Idee. ;)
klar, c&p bug :)

MfG
micki

Elemental
2005-08-29, 13:27:41
OK, hab schon sehr an meinen C++ Kenntnissen gezweifelt... :D

Coda
2005-08-30, 00:00:18
Das ist exakt das gleiche wie "CStationData* pStationData = LaneData->GetTransmittedDownloadDataPtr();" vom Verhalten her. Aber sehr kreativ muss man schon sagen :D

P.S.: Hungarian Notation suckt

Senior Sanchez
2005-08-30, 00:03:13
Das ist exakt das gleiche wie "CStationData* pStationData = LaneData->GetTransmittedDownloadDataPtr();" vom Verhalten her. Aber sehr kreativ muss man schon sagen :D

P.S.: Hungarian Notation suckt

Ach, die Ungarische Notation hat schon Vorteile und ich findse auch gut, aber ich halte mich irgendwie nie dran *lach*

Coda
2005-08-30, 00:12:35
Nein, das Zeug kommt direkt aus der Hölle. Für sowas gibt's IDEs.

Senior Sanchez
2005-08-30, 00:13:48
Nein, das Zeug kommt direkt aus der Hölle. Für sowas gibt's IDEs.

Ja, stimmt schon, aber wenn de nen Codesnippet siehst, weißte sofort welchen Typs die einzelnen Variablen sind und das ist schon sehr vorteilhaft. Vor allem, es ist ne einheitliche Variante und wenn viele das nutzen, so führt das zu einem besser lesbaren Code.

Aqualon
2005-08-30, 00:14:40
hm... wird in der Zeile der Pointer pStationData nicht erst erzeugt? Wenn der Compiler also erst die 2. Zuweisung ausführen würde, müsste das doch fehlschlagen, weil pStationData noch gar nicht existiert (in welcher Reihenfolge so Mehrfachzuweisungen ausgeführt werden, ist afaik doch nicht definiert).

Aqua

ethrandil
2005-08-30, 00:48:22
hm... wird in der Zeile der Pointer pStationData nicht erst erzeugt? Wenn der Compiler also erst die 2. Zuweisung ausführen würde, müsste das doch fehlschlagen, weil pStationData noch gar nicht existiert (in welcher Reihenfolge so Mehrfachzuweisungen ausgeführt werden, ist afaik doch nicht definiert).

Aqua
Das würde heißen, dass die Variable aus dem übergeordneten Block UND die neu definierte gleichen namens in einer Zeile mit dem selben Wert belegt werden.

Humbug xD

- Eth

Coda
2005-08-30, 00:50:16
Ja, stimmt schon, aber wenn de nen Codesnippet siehst, weißte sofort welchen Typs die einzelnen Variablen sind und das ist schon sehr vorteilhaft. Vor allem, es ist ne einheitliche Variante und wenn viele das nutzen, so führt das zu einem besser lesbaren Code.Ich empfinde normalen Code als deutlich lesbarer, aber darüber kann man sicher herrlich philosophieren.

Aqualon
2005-08-30, 00:51:51
Das würde heißen, dass die Variable aus dem übergeordneten Block UND die neu definierte gleichen namens in einer Zeile mit dem selben Wert belegt werden.Wenn das ausserhalb bereits definiert war ;)

Humbug xDStimmt *g*

Ich weiß ja nicht, wie das in C++ ist, aber in C sind Konstrukte ala a = b = c laut unserem Prof. alles andere als sinnvoll verwendbar.

Aqua

Coda
2005-08-30, 01:29:27
Eigentlich ist das schon genau definiert, nur muss man die Reihenfolge halt wissen ;)

Aqualon
2005-08-30, 01:33:18
Eigentlich ist das schon genau definiert, nur muss man die Reihenfolge halt wissen ;)
Und die ist nicht zufälligerweise compilerabhängig?

Aqua

Coda
2005-08-30, 01:40:12
Eigentlich nicht, es wird von links nach rechts ausgewertet, wenn nicht geklammert.

Was schwierig ist, ist sowas wie

std::cout << a(2) << a(3) << std::endl;

Man weiß nicht ob a(2) oder a(3) zuerst ausgeführt wird.

Senior Sanchez
2005-08-30, 02:29:07
Eigentlich nicht, es wird von links nach rechts ausgewertet, wenn nicht geklammert.

Was schwierig ist, ist sowas wie

std::cout << a(2) << a(3) << std::endl;

Man weiß nicht ob a(2) oder a(3) zuerst ausgeführt wird.

Wobei glaube ich Zuweisungen von rechts nach links ausgewertet werden ;) Erst die rechte Seite und dann wird es zugewiesen an die Variable, die auf der linken Seite steht.

del_4901
2005-08-30, 03:23:41
Wobei glaube ich Zuweisungen von rechts nach links ausgewertet werden ;) Erst die rechte Seite und dann wird es zugewiesen an die Variable, die auf der linken Seite steht.

so siehts aus, nur in diesem speziellen fall hat die intiziallisierung vom Zeiger Vorrang.

das ist wie mit:

int bla = 8;

das ist auch nur kurz:

int bla;
bla = 8;

Chris Lux
2005-09-01, 08:06:14
Wobei glaube ich Zuweisungen von rechts nach links ausgewertet werden ;) Erst die rechte Seite und dann wird es zugewiesen an die Variable, die auf der linken Seite steht.
so siehts aus, nur in diesem speziellen fall hat die intiziallisierung vom Zeiger Vorrang.

das ist wie mit:

int bla = 8;

das ist auch nur kurz:

int bla;
bla = 8;
naja, nein!
fügt mal die klammern ein für die 'linksauflösung'.
es wird von links aufgelöst, doch bei der zuweisungskette steht ja a = b = c = irgendwas. somit wird a=(b=c=irgendwas) versucht zu aufzulösen, dafür muss aber b=(c=irgendwas) aufgelöst werden, da der wert für a das ergebnis der rechten seite (der zuweisung) ist. auf dem selben weg wird dann auch b=c=irgendwas aufgelöst und mann kommt zu der 'scheinbaren' rechtsauflösung ;)