005
14.08.2003, 12:59 Uhr
virtual
Sexiest Bit alive (Operator)
|
Ich weiß nicht recht: Die Namen von Defaultargumenten werden eben bereits zum Zeitpunkt der Deklaration der Funktion gebunden. Bei sowas wie Du dir vorstellst, wären solche Codestücke (die man konsequenterweise auch erlauben müsste) ja der reinste Graus:
C++: |
/* header.h */ #ifndef HEADER_H #define HEADER_H
extern const char* ptr; const char* g(const char* p = ptr);
#endif
|
C++: |
/* impl.C */ #include "header.h"
const char* ptr = "globaler_ptr";
const char* g(const char* p) { return p; }
|
C++: |
/* main.C */ #include <iostream> #include "header.h"
const char* f() { const char* ptr = "local_ptr"; return g(); }
int main() { std::cout << f() << std::endl; }
|
Dann würde nämlich plötzlich - wenn es nach Dir ginge - "local_ptr" ausgegeben. Und das nur, weil du auf Die Idee gekommen bist, in f eine Variable namens ptr einzuführen.
Bearbeitung: |
Um es ganz duetlich zu sagen: Du hast ptr natürlich nur Zufällig so gewählt, weil Du damit eigentlich nicht so sehr den Rückgabewert von g() beinflussen wolltest, sonderen weil es eben eine lokale Variable ist. Würde das Konzept der Namensbindung von Defaultargumenten zum Deklarationszeitpunkt aufgehoben, müsstest Du also alle Header durchforsten, damit du sicherstellst, daß durch wie wahl der Namen der variablen kein ungebetener Nebeneffekt auftrifft
|
Klar, jetzt könntest Du das Gegenargument bringen: Dann sollte es C++ eine Ausnahmeregelung geben, daß diese Bindung der Namen nicht für this gilt. Mir ist aber eine klare Regel lieber, als eine Regel mit Ausnahmen. Von denen gibt es nämlich genug und machen die Sprache nicht grade leichter zu verstehen. Deshalb glaube ich, daß diese "Einschränkung", die du siehst, eher zur Vereinfachung der Sprache beiträgt, als sie "schwerer" zu machen. -- Gruß, virtual Quote of the Month Ich eß' nur was ein Gesicht hat (Creme 21) Dieser Post wurde am 14.08.2003 um 13:09 Uhr von virtual editiert. |