011
14.08.2003, 15:24 Uhr
virtual
Sexiest Bit alive (Operator)
|
Ich glaube, wir reden wirklich ganz erheblich aneinander vorbei. Deshalb nochmal die Zusammenfassung meiner Gedanken:
1. Die Bindung der Default parameter geschieht zum Zeitpunkt der Deklaration. Daher müssen die verwendeten Parameter bereits bekannt sein. Insbesondere nicht deklararierte Variablen und this können somit nicht als Defaultparameter verwendet werden, weil zu this immer eine Instanz gehört, die es zum Deklarationszeitpunkt nicht gibt/geben kann.
2. Löst man die unter (1) genannte Regel auf und sagt: Okay, mir ist egal, was zum Zeitpunkt der Deklaration gegeben ist, dann muß logischerweise die Bindung kontextabhängig sein. Entweder ganz, oder Teilweise. Damit läuft man genau in die Probleme, die ich zuvor nannte. Insbesondere wäre es nicht consistent:
C++: |
struct X { void f(X* x=this); void g(X* x) { x->f(); }; //! Hier! }
... X y; y.g();
|
Eigentlich dürfte nie f(x) aufgerufen werden, weil ja in g das this auf das y zeigt, dh insbesondere der Gedanken gang:
C++: |
f(X* = this) { ... };
|
sei gleichbedeutend mit
C++: |
f() { f(this); }; f(X*) { ... };
|
ist hoch problematisch, weil er unterstellt, daß die parameter zusammengesucht werden, wenn f schon aufgreufen wurde. Dem ist ja nicht so. Die Parameter werden davor zusammengesucht. Also im g - da, wo this auf y zeigt.
Wenn man sich einfach mal vergegenwärtigt, daß this eine lokale Variable ist, dh nur innerhalb einer Methode gültig ist, dann würde das konsequent zu Ende gedacht genau auf das Problem zulaufen, welches ich im local/global ptr aufgezeigt habe. -- Gruß, virtual Quote of the Month Ich eß' nur was ein Gesicht hat (Creme 21) Dieser Post wurde am 14.08.2003 um 15:29 Uhr von virtual editiert. |