Praktische Erweiterungen im neuen Standard!?
-
Ich hab den Artikel im Magazin gelesen, gibt's neben dem ganzen Technikkram für Programmierfreaks (Templates mit variabler Anzahl an Parameter usw.) auch "tolle" Neuerungen für den einfachen Programmierer?
Z.B. würde der string-Klasse ein paar neue Methoden wie trim oder toLower echt guttun. Was ändert sich für den Durchschnittsprogrammierer?!
-
Ah, std::string ist jetzt schon ein Beispiel für den Design-Fehler "Monolithic Class".
std::shared_ptr, std::scoped_ptr sollten für den normalen Programmierer der bisher zu faul war boost zu installieren von Belang sein. R-value Referenzen führen (einfachere) Möglichkeiten ein Move-Semantik zu benutzen. constexpr erlaubt es Funktionen auch für Compiletime-Konstanten zu verwenden (z.B. std::numeric_limits<>::max()).
std::vector und andere Container werden in Zukunft einfacher zu initialisieren sein.
std::vector <int> vec = { 1, 2, 4, 25 };Vereinheitliche Initialisierung von Plain-Old-Data Typen und C++ Klassen, ...
Relativ viel, was auch der normale Programmiere gebrauchen kann.
Gruß
Don06
-
was ist das für ein design-fehler den du angesprochen hast?
-
Das er zuviele Memebrfunktionen hat meinen einige. Aber eigentlich taugt schon die Grundidee mit wstring und string nichts, es gibt noch nicht mal ne Möglichkeit anzugeben, welche Codierung (UFT8, ASCII...) der String hat. Das ganze Ding ist ein Verkrüppelter Vector der für nen richtigen String zuwenig und für nen char*-Ersatz-Container zu viel hat.
Kann im nächsten standard std::ofstream mit den strings oder immer noch nur char*?
-
http://www.gotw.ca/gotw/084.htm
Ist aber eigentlich relativ bekannt. std::string wird meistens angeführt, wenn man so einen Design-Fehler erklären will, weil den ja jeder C++ Programmierer kennt.
-
Okay, verstanden. Aber wieso kann man in diesen Stein nicht noch ein paar andere FUnktionen meißeln? Oder irgendwie re-designen ohne die Schnittstelle zu ändern?
Wird sich für die anderen Container noch etwas ändern? Neue Methoden? Oder gibt's da dasselbe Problem?
-
wiedennjetzt schrieb:
Okay, verstanden. Aber wieso kann man in diesen Stein nicht noch ein paar andere FUnktionen meißeln? Oder irgendwie re-designen ohne die Schnittstelle zu ändern?
Re-designen kannst du vergessen, ohne dass die Schnittstelle geändert wird. Wenn du es wirklich verstanden hättest, wüsstest du auch, wieso man dies ohne Schnittstellenänderung nicht hinbekommen könnte. Es ist schliesslich genau die Schnittstelle, welche als falsch angesehen wird.
Hinzugefügt wird wahrscheinlich nichts. Ausser das UTF-8, UTF-16 und UTF-32 rudimentär unterstützt werden. Das kommt aber einfach dadurch, dass entsprechende Typen eingeführt werden und somit über den Templateparameter von std::basic_string übergeben werden kann.
wiedennjetzt schrieb:
Wird sich für die anderen Container noch etwas ändern? Neue Methoden? Oder gibt's da dasselbe Problem?
Wüsste ehrlich gesagt nicht, was man denen für neue Methoden geben sollte, ausser den neuen Konstruktor mit der direkten Initialisierungsliste und natürlich die neue Movesemantik.
Was sollen eigentlich "einfache" Programmierer sein? Neulinge? Es wurde glaub ich schon genügend erklärt, dass C++ nie eine anfängerfreundliche Sprache war/ist/sein wird. Und man hat es auch gar nicht vor.
Jeder der sich ernsthaft mit C++ auseinander setzt, wird doch irgendwann da rauf steigen und bei diesem "Technikkram für Programmierfreaks" ankommen.
Wobei ich gerade noch ein wenig Mühe mit dem Programmierfreaks habe, da ich mich jetzt nicht unbedingt dazu zähle, aber gerade aufVariadic-Templatesoder auch die neue Bedeutung vonautoextrem freue ...Grüssli
-
Definitiv nicht. Das meiste im neuen Standard wird garantiert von 80% der C++-Programmierer nicht genutzt werden. Hart formuliert: Das ist Zeug für Freaks. Man kann ja froh sein wenn der "normale" Programmierer mal n Template benutzt hat!
Und schau dir mal Java an, was die Klassen da alles anbieten. Und das hat garantiert nix damit zu tun das "c++ keine einfache sprache" ist.
So wie das aussieht kommt n' Standard der den wenigsten was bringen wird
-
also den null_ptr können glaub ich sogar ein paar Leute brauchen.
-
Was soll denn heißen, das niemand Templates benutzt? Spätestens dann, wenn man Std-Lib-Nutzer ist, benutzt man Templates. Egal ob ich basic_string, vector, streams u.a. benutze, nutze ich Templates. Und dann werde ich auch bald autom. von den neuen C++-Concepts profitieren, auch wenn ich sie nicht direkt zum implementieren von Templates nutzen werde. Aber Concepts werden mich als Std-Lib-Nutzer unterstützten, gaaanz automatisch ohne das ich davon Ahnung haben werde. Warum? Weil die Fehlermeldungen bei Templates in Zukunft für den Std-Lib-Nutzer viel verständlich werden.
Vieles aus C++0x wird den Library-Entwicklern helfen, einfacher bessere Libraries zu entwickeln. Und davon wird auch der Nicht-Freak profitieren. Weil der Nicht-Freak nunmal (hin oder her) Freak-Libraries nutzen wird.
Boost Libraries werden auch von den sogenannten C++-Freaks entwickelt. Aber sie sind für jeden C++-Nicht-Freak nutzbar! Und das ist auch ein Ziel von C++0x!
-
C++0x!
Freakfaktor 10