Vorteil von Initialisierungslisten
-
pumuckl schrieb:
...Es gibt nichts ..."leereres"...
Hmmm, dann ist das halbvoll Glas nicht leerer als das volle ?
tntnet schrieb:
...Ansonsten sehe ich es genauso, daß es keine optimalere Lösung geben kann. Höchtens einen Lösung, die näher an der optimalen Lösung dran ist. Das wäre dann eine optimierte Lösung...
Also "optimiert" ist von der Wortverwendung äquivalent zu "verbessert" - und das drückt nicht dasselbe aus wie "besser" (bezieht sich auf einen Prozess und weniger auf einen Zustand).
An alle, die unter "Komparativ" immer nur "Steigerungsform" verstehen (wollen): Ist Dunkelgrau "schwärzer" als Hellgrau ? Ein Halbvolles Glas "leerer" als ein volles ? Ein 50m hohes Gebäude "tiefer" als ein 100m hohes ? ...
Ihr stellt Euch selbst ein Bein, indem ihr die Vergleichsform aus der deutschen Sprache streicht und wenn dann noch mathematische Definition von Steigerung herangezogen werden, wird's ganz krude (man käme ja auch nicht auf die Idee, an einen Kerl mit stetigem Charakter die epsilon-delta-Definition anzulegen).
Gruß,
Simon2.
-
Simon, mir scheint Du verwechselst die Tätigkeit des Optimerens mit dem Zustand des Optimalen. Natürlich ist ein optimierter Code noch lange nicht optimal. Wäre er das, dann könnte man keinen optimaleren schreiben.
-
Simon2 schrieb:
Hmmm, dann ist das halbvoll Glas nicht leerer als das volle ?
ein Glas ist entweder voll, leer oder irgendwas dazwischen... aber ein Glas kann nicht "leerer" oder "voller" als ein anderes sein, da beides ein fest definierter Zustand und kein variabler ist.
tntnet schrieb:
An alle, die unter "Komparativ" immer nur "Steigerungsform" verstehen (wollen): Ist Dunkelgrau "schwärzer" als Hellgrau ? Ein Halbvolles Glas "leerer" als ein volles ? Ein 50m hohes Gebäude "tiefer" als ein 100m hohes ? ...
dunkelgrau ist dunkler als hellgrau, in einem halbvollen Glas ist weniger Inahlt als in einem vollen und das 50m Gebäude ist niedriger als ein 100m hohes (wobei "tief" durchaus gesteigert werden kann, aber eher bei negativen Höhen Verwendung findet
Adjektive, die einen festen Zustand definieren (wahr, falsch, voll, leer, weiß, schwarz, usw) machen einfach keinen Sinn, gesteigert zu werden. Genauso ist optimal bereits das "Bestmögliche", lediglich ein anderes Wort dafür
-
Bis auf den ersten Punkt war aber jetzt kein wirklicher Vorteil der Initialisierungslisten dabei. Und den Nachteil das ein Schritt dazu kommt könnte auch jeder Optimerer weg machen, wenn er erkennt, dass die Variable sowieso gleich anders Initialisiert wird, was ja nicht so schwer ist, wenn man nicht gerade durch Pointer auf Pointer oder so initialisiert.
Die anderen Sachen sind halt anders nicht erlaubt. Beim Basiskonstruktoraufruf könnte man auch einfach an den Anfang vom Konstruktor schreiben, wobei da der Aufruf über die Initialisierungsliste eigentlich ok ist. Aber bei const Variablen wäre es genauso im Konstruktor möglich. Der Compiler er sagt mir ja so schon, dass es in die Initialisierungsliste muss, dann könnte er auch so tun, als ob es da wäre.Am optimalersten
wäre es, wenn es einfach so möglich wäre:class foo { ... const int i = 4; }Dann wäre es auch gleich für alle Konstruktoren initialisiert. Oder gibts nen anderen weg, ne Variable einmal so zu initialisieren, dass sie für alle Konstruktoren initialisiert ist?
-
rofl
Da hab ich ja was losgetreten.Die Sache ist doch relativ einfach. Da "optimal" ein Superlativ ist, gibt es keine Abstufungen von "optimal". Damit auch keine Steigerungsform.
Logisch bzw. mathematisch betrachtet könnte man sagen dass ein leeres Glas "leerer" als ein nicht leeres Glas ist. Ähnliche Aussagen wären...
* Ein rotes Tuch ist roter als ein grünes Tuch
* Kurt Cobain ist toter als Madonna
* Ein gesetztes Bit ist gesetzter als ein ungesetztes Bit
* Eine geschlossene Tür ist geschlossener als eine offene Tür
* Eine verheiratete Person ist verheirateter als eine nicht verheiratete Person
etc.Logisch betrachtet machen diese Aussagen Sinn, allerdings vom Sprachlichen her kommen sie jedem komisch vor, und das mit Recht; wenn ich mich nicht irre sind sie im Deutschen nämlich allesamt Blödsinn.
Und mit "optimal" ist es im Prinzip genau dasselbe. Wieso bloss kommt "toter" oder "geschlossener" gleich jedem komisch und falsch vor, aber bei "optimaler" denkt sich keiner was? Hm.
-
@hbjkl: Was wolltest Du jetzt eigentlich hören? Der „Vorteil“ von Initialisierungslisten ist halt, dass es ohne sie in C++ nicht geht. Man kann argumentieren, inwiefern sie wirklich nötig sind und ob man es beim Sprachdesign anders hätte lösen können. War es das, was Du diskutieren wolltest?
Oder war Deine Frage konkret auf den Vorteil in C++ bezogen (das sollte ja jetzt beantwortet sein)?
-
Gibt es denn einen Weg von dieser zwanghaften Code duplication weg zu kommen?
class a{ public: a():klasse(8,7,6){} a(int n):klasse(8,7,6){} a(double n):klasse(8,7,6){} private: Klasse klasse; };Also sowas in der Art
class a{ public: a(){} a(int n){} a(double n){} private: Klasse klasse(8,7,6); };
-
Ist klasse immer in allen a's gleich, also ist sie Objektunabhängig ?
Wenn ja mache sie static und definiere sie einmal.BTW: Mehr Sprachexperten als Programmierer hier

-
nein, sie soll nur immer gleich initialisiert werden. (Könnte auch ein einfacher Datentyp sein).
-
Mal eine theoretische Sprache:
class Foo { int zahl = 5; Bar bar = Bar("hallo"); Foo() { } // a Foo(int z, Bar b) { zahl = z; bar = b; } // b // b) sollte das gleiche sein wie Foo(int z, Bar b) : zahl(z), bar(b) { } }Hier ist der default-Wert fuer zahl=5 und fuer bar=Bar("hallo"). Dies wird bei a) angewandt. Wieso kann man nun keinen Compiler schreiben, der sieht das man bei b) die Default-Werte eh ueberschreibt und somit die Werte in den Parametern als Default-Werte nimmt?
Aber im grunde ist das alles so egal. Ich schreibe immer Initalisierungslisten, weil ich weis das es effektiver ist in C++.
-
hbjkl schrieb:
Gibt es denn einen Weg von dieser zwanghaften Code duplication weg zu kommen?
class a{ public: a():klasse(8,7,6){} a(int n):klasse(8,7,6){} a(double n):klasse(8,7,6){} private: Klasse klasse; };Also sowas in der Art
class a{ public: a(){} a(int n){} a(double n){} private: Klasse klasse(8,7,6); };Einfach:
class a_base { friend class a; a_base() : klasse(8,7,6) {} Klasse klasse; }; class a : a_base { public: a(){} a(int n){} a(double n){} };Effektiv ergibt sich das Problem aber nicht SO oft.
-
KasF schrieb:
BTW: Mehr Sprachexperten als Programmierer hier

Das ist für mich eines der größten Probleme (und gleichzeitig einer der größten Vorteile) bei Foren: Man weiß einfach nicht, was der Gegenüber eigentlich alles kann, und welche Praxiserfahrungen er hat.
In einem anderen Forum, an dem ich mitarbeite, hatten wir früher eine Option in den Benutzerprofilen, wo der Benutzer einstellen konnte, wie er seine Fähigkeiten bewertete – war furchtbar nutzlos, das ganze, weil sich fast niemand realistisch einschätzt. Inzwischen haben wir nur noch das Fließtext-Feld, in dem jeder Nutzer etwas über sich sagen kann.
(Ich weiß, ich weiß, fürchtbar OT.)
-
Konrad Rudolph schrieb:
Das ist für mich eines der größten Probleme (und gleichzeitig einer der größten Vorteile) bei Foren: Man weiß einfach nicht, was der Gegenüber eigentlich alles kann, und welche Praxiserfahrungen er hat.
Nach einer Weile des Umgangs miteinander bekommt man aber doch zumindest ein Gefühl für die eigene und die Kompetenz der anderen. Außerdem würde ich die Praxiserfahrung - sofern du sie mit beruflicher Ausübung assoziierst - gar nicht so sehr als Kompetenzkriterium heranziehen.
-
zwutz schrieb:
...aber ein Glas kann nicht "leerer" oder "voller" als ein anderes sein, da beides ein fest definierter Zustand und kein variabler ist. ...
Das ist ja eine nette Definition ... aber Du musst in einem anderen Land leben als ich. (Vieleicht in "Elfenbeinturmien" ?
).
Also selbst mein pedantischer Deutschlehrervater hat nichts gegen "voller/leerer" einzuwenden und auch sonst niemand, den ich kenne.Anscheinend verwechseln hier einige die deutsche Sprache mit einer Programmiersprache (die eine derartige Eindeutigkeit braucht, weil Computer sie brauchen) ...
hustbaer schrieb:
rofl
...Da "optimal" ein Superlativ ist, ...Stimmt aber nicht. Ich habe auch noch keine Quelle gefunden, die (das deutsche Wort) "optimal" als Superlativ bezeichnet .. oder wovon soll das der Superlativ sein ?

Gruß,
Simon2.
-
@Simon2:
Ich denke du wirst recht haben was "optimal" und "Superlativ" angeht: syntaktisch ist "optimal" kein Superlativ.
Semantisch allerdings schon