P
@Knuddl: Es gibt in der C/C++-Welt sehr wenige stringformate/wrapper, die nicht einen null-terminierten String wenigstens als "Bridge" anbieten.
Ball gefangen hab?
Hab nix gegen die STL-Variante - hab' nochmal alles brav gelesen und festgestellt, daß du sie tatsächllich nur "daneben gestellt" hast. Die m.E. "sinnlosen" Kommentare kamen woanders her.
Ich habe gewiß deutliche Vorurteile gegenüber Programmierern, die ihnen als "gut" verkaufte Konzepte und Werkzeuge als den heiligen Gral hinnehmen, ohne die Randbedingungen zu erfragen. Ich bin in diesem Forum nicht zum ersten Mal angeeckt, weil jemand (auch berechtigte) Einwände hatte - nur war fast jedesmal das Hammerargument "Nicht Standardkonform" (was ich bei dieser Frage nach wie vor für falsch halte) - und kein Wort mehr. Siehe cd9000. Als hätte ich "Jehova" gesagt - ohne Sinn und Verstand. Find ich putzig, ist mir in keinem anderen Forum so untergekommen, wollt ich mal nachbohren.
aber weil's so shön ist..
@ShadeofMine:
CUJ/Alexandrescu lesen enthebt mich leider nicht vom selbst denken.
Kannst du mir bitte erklären, was an der strtol-Lösung schlecht ist?
**std::string vs. char const ***
Betrachte doch char const * einfdach mal als Bridge-Typ zwischen der String-Klasse (die nicht eindeutig bekannt ist) und den im C++ - Standard verfügbaren Funktionen... ist doch plötzlich allerfeinstes Design. Ich bin natürlich davon ausgegangen, daß die Implementation von String einen Null-terminierten (w)char const * als bridge unterstützt.
Weiterhin: Es gibt unzählige Situationen, in denen ein std::string besser ist als ein char * - aber keinen absoluten Grund.
RAII - welche Resourcen werden in der strtol-Variante bitte aquiriert?
Netterweise kann nur in der STL-version überhaupt eine Exception fliegen...
Exceptions = weniger code: Nur bedingt. Exceptions separieren primär Fehlerbehandlung vom "normalen" Programmfluß. (Was unbestritten Vorteile hat.) Weniger Code bekommst du nur, wenn die Exceprtion tatsächlich über mehrere Aufrufe durchgereicht wird - das ist aber eher marginal, weil für sinnvolles User-Feedback meist eine Übersetzung der Exceptions notwendig ist.
Performance strtol beinhaltet nur den Konvertierungskern, die STL-Version einiges mehr. Hm... stringstream anlegen, der noch ein streambuf anlegt, string kopieren (im günstigen fall referenzgezählt), und dann erst die Umwandlung - also mein compiler optimiert das nicht alles weg. da muß strtol sich schon viel Mühe geben, nicht hinterherzukommen. Und wenn dir std:.string so am Herzen liegt - was ist
strtol kennen oder nicht Ich bin nur davon ausgegangen, daß jemand wirklich den gesamten Vertrag der involvierten Entities studieren muß - z.B. um einen Fehler zu finden. Da machtz es keinen Unterschied, ob man von dem einen schon mal was gehört hat und dem anderen nicht - höchstens, wenn man mit dem einen regelmäßig arbeitet, und dem anderen nicht.
Falsches Forum erstens war meine einzige Standard-Verletzung das "deprecated" stdlib.h, zweitens wurde die Frage ursprünglich in einem anderen Forum gestellt. Ich will euch eure templates doch nicht wegnehmen, Menschenskinder.