drei fragen zum c++ standard
-
Also ein const-Ctor ist einfach Unsinn.
Hier wird IMMER schreibend auf das (noch gar nicht wirklich existente Objekt) zugegriffen. Zumindest der this-Zeiger wird immer (implizit) angefasst, wenn das Objekt konstruiert wird. Insbesondere auch bei const-Objekten muss ja gerade der Konstruktor dafür sorgen, dass ein solches Objekt überhaupt definierte Werte bekommt. const-Methoden dürfen aber per Definition das Objekt nicht verändern. Das gilt für alle Konstanten. Sie sind zum Zeitpunkt ihrer Definition noch nicht Konstant. Sonst könnten sie gar nicht definiert werden.
-
Ich glaube der OP möchte eine ctor, der nur verwendet werden darf, wenn das damit konstuierte Objekt selbst als "const" markiert ist.
Also wenn man z.B. schreibt:void foo() { const bar b1(123); // <- hier bar b2(123); // <- hier nicht }Das würde es ermöglichen Objekte zu basteln die man nur "von const nach const" kopieren kann, aber nicht "von const auf nicht-const", z.B. so:
class foo { public: foo(foo&); foo(foo const&) const; // <- der "const-ctor" };Das wiederum würde sicherstellen dass "const" sozusagen "erhalten bleibt" (zumindest solange es keiner wegcastet), und würde neue, ungeahnte Möglichkeiten eröffnen die Sprache zu vergewaltigen.
Genau aus dem Grund finde ich auch dass es keine Gute Idee ist

-
hustbaer schrieb:
und würde neue, ungeahnte Möglichkeiten eröffnen die Sprache zu vergewaltigen.
So wird es sein. Natürlich ist ein Iterator, der konstant sein muss kein Iterator, denn iterieren implizit verändern. Oder man interpretiert dieses äußere const als reine Dekoration, dann kann man aber keine richtig konstanten const-Iterator-Objekte haben. So oder so ist das Ganze nicht durchdacht, aber natürlich ist es immer einfacher, anderen das Denken zu überlassen.
-
@hustbaer
genau das war meine idee. jemand, der const wegcastst, ist sowieso selbst schuld. man kann auch gleich inline assembler einbauen und sich den ramm absichtlich kaputt machen. soweit ich das sehe, hätte diese änderung keine auswrikungen auf die bishere semantik von ctors. sie wird nur erweitert. auch die performance leidet darunter nicht.camper schrieb:
So oder so ist das Ganze nicht durchdacht, aber natürlich ist es immer einfacher, anderen das Denken zu überlassen.
also das is echt total fad, wenn du hier solche sachen sagst. ich bin echt für argumente offen, aber das is dann doch etwas unter deinem niveau, meinst du nicht?