Anfängerfrage: ist "private" wirklich private?
-
hängt vom compilier ab
Sicher? Ich würde mal sagen wenn überhaupt vom Linker. Auf der anderen Seite sind Access-Level eigentlich nur auf Quellcodeebene relevant. Access-Level sind nicht Teil des Name-Manglings (man kann Methoden nicht auf Basis ihres Access-Levels überladen). Im Objektcode gibt es keine Unterscheidung zwischen private/protected/public also nicht.
Insofern würde ich mal sagen, dass es aus Linkersicht keine Probleme geben dürfte. Auf der anderen Seite findet man für sowas natürlich keine Garantien im C++ Standard.
@<keinPlan>Du missinterpretierst private. private ist kein Sicherheitsschloss gegen absichtliche Angriffe. private schützt ehrliche Programmierer vor Fehlern und Abhängigkeiten. Wenn du wirklich Sicherheit willst, kauf dir ein Panzerschrank
Und wer noch etwas schönes lesen will: http://www.gotw.ca/gotw/076.htm
Der einfachste Weg etwas wirklich private zu machen ist der Einsatz des pimpl-Idioms.
http://www.gotw.ca/gotw/024.htm http://www.gotw.ca/publications/mill05.htm http://www.gotw.ca/gotw/007.htm http://www.gotw.ca/gotw/028.htm[ Dieser Beitrag wurde am 05.04.2003 um 20:25 Uhr von HumeSikkins editiert. ]
-
ein
#define private: public:
bevor man einen header einbindet ist doch sicherlich mal lustig
-
wenn dann #define private public
private: sind 2 Tokens
-
Bjarne Stroustrup sagt dazu: "Die Schutzmechanismen in C++ bieten Schutz gegen Zufälle, nicht gegen Betrug."
- Oder so ähnlich. Ich könnte nachgucken, müsste dazu aber laufen ;-).
-
Tokens? Eher 2 Token.
-
@<Tokenizer>: nö, die Mehrzahl von Token ist schon Tokens...
-
Ich glaube aber mal gehoert zu haben dass man Schluesserwoerter nicht per #define umdefinieren darf. Also undefiniertes Verhalten.
-
Ich glaube aber mal gehoert zu haben dass man Schluesserwoerter nicht per #define umdefinieren darf.
Und wärst du dem ersten von mir geposteten Link gefolgt, so bräuchtest du nicht zu glauben
-
Also löscht alle brav eure VC-for-scope-fixes, denn ihr verletzt den Standard.
-
OK, wenn du es sagst
-
Hume: Steht das auch irgendwo in der Norm, oder hat Herb das gerade frisch erfunden? Ein Keyword ist doch in den ersten Übersetzungsphasen ein ganz normaler Identifier. Illegal wird's erst, wenn man einen Standardheader einbindet. Habe ich was übersehen?
-
Original erstellt von <keinPlan>:
Ich muß doch zu jeder .LIB eine Headerdatei haben. Und ich kann doch nun einfach in der Headerdatei aus "PRIVATE:" ein "PUBLIC:" machen und habe nun den Zugriff auf die privaten Methoden und Variablen (ob das Sinn macht, ist eine andere Frage...)
Bemerkt der Linker beim Binden diese Manipulation?Ich würde ja tippen, dass private-Funktionen einfach garnicht groß benannt und exportiert werden, also fehlen dannd ie Symbole für den Linker, aber das ist sichelrihc Compilerfrage.
-
Habe ich was übersehen?
Keine Ahnung. Halte ich aber für unwahrscheinlich. Und für noch unwahrscheinlicher halte ich es, dass ausgerechnet ich das von dir Übersehende finden könnte
Illegal wird's erst, wenn man einen Standardheader einbindet
Yo. 17.4.3.1.2 habe ich auch gerade gefunden.
Ich *tippe* jetzt einfach mal, dass Herr Sutter in dem Text einfach die Diskussion dieses kleinen Details *absichtlich* und aus Gründen der Geringfügigkeit, Klarheit und Kürze ausgelassen hat.
-
Oha. Ich habe doch noch was gefunden:
Original gotw-Thread mit Diskussion aus comp.lang.c++.moderated