Warum char * und nicht string?



  • Hallo Leute,

    ich bin kein Programmierer-Guru aber ich möchte wissen, was spricht überhaupt gegen string-Benutzung?

    Ich sehe immer wieder das viele Leute mit char * arbeiten, obwohl sie C++ Programme schreiben. Wenn string ein Bestandteil des STL ist warum dann wieder das Rad neu entwickeln?

    Danke für eure Beiträge.



  • Meistens ist der Grund ein veraltetes Tutorial, ein Dozent mit der fehlenden Bereitschaft sich weiterzubilden, oder ein Buch aus der 21-Tage-Reihe 😃

    Im Ernst:
    Solange man sich nicht mit C-APIs rumschlagen muss, die nicht-konstante C-Strings erwarten, spricht garnichts gegen die Benutzung von std::string.



  • shuriko schrieb:

    ...was spricht überhaupt gegen string-Benutzung?

    Ich kenne eigentlich nur drei Gründe die ich bislang akzeptiere:

    a) Es wird von der Aufgabenstellung so verlangt (gegen Lehrer und Dozenten die nicht in der Lage sind sich weiterzubilden ist man machtlos)
    b) Mit einem Profiler nachgewiesener Flaschenhals, der eindeutig auf die Verwendung der Stringklasse zurückgeht (wobei es meist nicht das Problem ist).
    c) Schnittstellen über Compilergrenzen / -Versionen hinweg.

    cu André



  • d) wenn char* auf Teile eines großen Strings zeigen oder dies Teil eines unions ist etc. Also eigentlich alles was irgendwie in den Bereich 'Hack' fällt.



  • Zu a): Wenn mein Lehrer/Dozent tatsaechlich so fortschrittsresistent waere, wuerde ich einmalig einen Text schreiben nach dem Motto "Da wir uns momentan nicht explizit mit dem Thema char-Arrays beschaeftigen werde ich die Moeglichkeiten der Sprache nutzen und mit dem deutlich sichereren und einfacher zu handhabenden std::string arbeiten."
    Diesen Text wuerde ich penetrant an jede meiner Loesungen anfuegen, ebenso penetrant die char-Arrays aus der Aufgabenstellung mit strings ersetzen und den Dozenten darauf ansprechen, dass ich das selbstverstaendlich auch mache, damit er uebersichtlichen Code bekommt und sich nicht mit altbackenem char-Gefrickel und <cstring>-Funktionen herumplagen muss.
    zu d): derartige Hacks kann man meistens auch "schoen" machen, es sei denn der Profiler oder mangelnde Ressourcen verlangen was anderes -> b)



  • Fellhuhn schrieb:

    d) wenn char* auf Teile eines großen Strings zeigen oder dies Teil eines unions ist etc. Also eigentlich alles was irgendwie in den Bereich 'Hack' fällt.

    Also die Notwendigkeit, Zeiger auf einzelne Zeichen oder Bytes (in C++ leider nicht von chars zu unterscheiden) zu haben, wollte hier niemand bestreiten und das passt IMHO deswegen hier nicht rein.

    Es würde ja auch keiner etwas gegen int* oder myClass* haben....

    Gruß,

    Simon2.



  • Also den einzigen Vorteil, den ich in char* sehe, ist der, dass man sehr einfach und sehr schnell an eine bestimmte Position kommt... Allerdings gleicht das wohl kaum die vielen Nachteile aus...



  • unskilled schrieb:

    Also den einzigen Vorteil, den ich in char* sehe, ist der, dass man sehr einfach und sehr schnell an eine bestimmte Position kommt...

    Bei String auch.



  • Simon2 schrieb:

    Bytes (in C++ leider nicht von chars zu unterscheiden)

    Zeichen (chars) und bytes (unsigned char oder seltener auch signed char) sind in C++ verschiedene Datentypen und daher sehr wohl voneinander zu unterscheiden



  • unskilled schrieb:

    Also den einzigen Vorteil, den ich in char* sehe, ist der, dass man sehr einfach und sehr schnell an eine bestimmte Position kommt... Allerdings gleicht das wohl kaum die vielen Nachteile aus...

    Du meinst sowas?

    string str("Hallo");
    char a = str[2]; // 3. Position
    a = str.at(2);
    

    Hem, ist natürlich nicht so einfach mit der String-Klasse. 😃



  • pumuckl schrieb:

    Simon2 schrieb:

    Bytes (in C++ leider nicht von chars zu unterscheiden)

    Zeichen (chars) und bytes (unsigned char oder seltener auch signed char) sind in C++ verschiedene Datentypen und daher sehr wohl voneinander zu unterscheiden

    Hmmm ? Wie denn ?

    Gruß,

    Simon2.


Anmelden zum Antworten