C zu C++ - Einfacherer Übergang?
-
@Otze: Okay, danke für die Erklärung.
Ich hab's auch selber noch nie benötigt, sondern hatte es nur im Hinterkopf, da ich dann -falls ich mal komische Kompilermeldungen diesbzgl. kriege- ich weiss, wonach ich googeln muss
-
veritySeeker schrieb:
Wegcastbarkeit von "const" ist sehr wohl ein Argument (C++ unterstützt dies sogar noch durch den eigens dafür geschaffenen const_cast<...>). Ich ziehe es vor, wenn mir ein Compiler sagt, daß ich Mist baue, anstatt mich stillschweigend mit undefiniertem Verhalten zu bestrafen.
Was ist denn an der Nutzung von
const_cast
"stillschweigend"? Warum sollte manconst_cast
überhaupt auf Konstanten anwenden wollen? Die Zahl derconst_cast
s sollten auch bei einem größeren Projekt in der Nähe von 0 liegen. Hauptsächlich ist es dazu dar, Funktionen aufrufen zu können, von denen man genau weiß, dass sie Daten nicht verändern, aber deren Author es nicht für nötig gehalten hat,const
zu benutzen, und man keine Möglichkeit hat, die Schnittstellen zu ändern. Das ist extrem unschön, ja. Aber in solchen Fällen geht es nicht anders. Da ist mir einconst_cast
aber lieber als ein C-style Cast; denn dem C-style cast sieht man das nicht so leicht an, was der eigentlich genau macht.veritySeeker schrieb:
Und ein #define ... Literal, oder enum, wirst Du mit allen Casts der Welt nicht beschreibbar machen können.
Ich finde das Argument nicht besonders überzeugend. Das ist für mich kein Grund, die Finger von "konstanten Variablen" zu lassen. Ich kann mir keinen Fall vorstellen, in dem man versehentlich ein const_cast auf eine Konstante anwendet und anschließend den Wert zu ändern versucht.
veritySeeker schrieb:
Wie wir sehen, hat C++ gegenüber C in puncto Konstanten keine sinnvolle Neuerung gebracht, eher im Gegenteil: C++ hat, wie so oft, ein nichtvorhandenes Problem adressiert und damit eine zusätzliche Fehlermöglichkeit eingeführt, ohne auch nur das Geringste zu verbessern.
Das Problem, was addressiert wurde, war: "Makros sind unschön". Für #include, #if und co sind Makros geblieben. Für Konstanten und inline-Funktionen braucht man sie jetzt nicht mehr. Bei Konstanten ist es relativ egal, was Du benutzt. Inline-Funktionen gefallen mir aber besser als "Funktions-Makros". Gut,
inline
gibt's in C99 auch. Aber ich meine mich zu erinnern, dass dasinline
relativ restriktiv in C99 was die ODR (one defnition rule) und Linkage angeht.btw: Ich fand "The Design and Evolution of C++" erhellend. Das Buch beschreibt, warum die Sprache so ist, wie sie ist. Auch nachdem ich das durch hatte, war ich keineswegs von C++ enttäuscht.
-
namespace invader schrieb:
Und nicht nur wxWidgets; kaum eine größere Bibliothek macht Gebrauch von allen Möglichkeiten von C++.
Wieviele modernere C++-Bibliotheken kennst du? Schau dir z.B. mal Boost an, eine der wohl bekanntesten Bibliotheksammlungen für C++. Und warum sollte man das hinterletzte Feature verwenden? Sag mir nicht, dass jeder C-Programmierer iso646 oder setjmp benutzt.
namespace invader schrieb:
"C mit Klassen" ist einfach alles, was man wirklich braucht.
Man braucht keine Klassen. Man braucht nicht mal C. Sehr sinnvolle Aussage, dazu noch sehr gut begründet.
namespace invader schrieb:
Ein paar Sachen wie Templates sind vielleicht noch nützlich, wenn man vorsichtig ist, aber alles darüber hinaus ist eher was für Esoteriker und bringt nicht wirklich was, sondern sorgt nur für neue Probleme und macht alles unnötig kompliziert.
Kannst du bitte mal mit solchen aus der Luft gegriffenen Behauptungen aufhören? Nur weil du die Features nicht kennst oder nicht mit ihnen umgehen kannst, brauchst du sie nicht als esoterisch herabzutun. Bring lieber mal Argumente, deine persönliche Meinung kennen wir inzwischen.
-
Irgendwie musste ich schmunzeln, als ich grade das bei FeFes Blog gelesen hab, und wollte es euch nicht vorenthalten:
-
Der geht aber auch sehr unvoreingenommen an sowas ran
.