Effizient mit Strings arbeiten



  • Servus,

    ich lasse einen Loggingstring mitlaufen, den ich oft verlängere.

    string out;

    dann kommt oft out += "neuer Text"; usw. dazu. Ist das in C++ okay oder wird das anders geschickter gelöst. Aktuell setze die normale string-Klasse ein.

    Danke vorab.



  • Wenn du vorher abschätzen kannst, wie lang der String wird, wäre

    logstring.reserve(erwartete_laenge_plus_etwas_luft);
    

    vor dem Zusammensetzen sinnvoll, aber ansonsten sehe ich da keine Probleme. Wenn du nicht nur Strings, sondern auch andere Datentypen zu einem String zusammensetzen willst, gibt es std::ostringstream:

    #include <sstream>
    
    // ...
    
    std::ostringstream fmt;
    
    fmt << "foo" << 1 << etc;
    
    std::string s = fmt.str();
    


  • Um was genau machst du dir Sorgen?

    Wenn es ja zu Logging Zwecken ist wird da ja am Ende, wenn es um Performance geht alles reingepackt, sondern wahrscheinlich nur noch ein paar wenige Sachen und dann kann man das praktisch so ineffizient machen wie man will, ohne dass das Programm daran wirklich gehindert wird.

    Wenn es alleine wegen dem Operator ist, dann mach dir da überhaupt keine Sorgen. Das ist am Ende nur ein normaler Funktionsaufruf.



  • Jay1980 schrieb:

    ...dann kommt oft out += "neuer Text"; usw. dazu. Ist das in C++ okay oder wird das anders geschickter gelöst.

    Bei vielen Aufrufen kenne ich die Regel, das man eher auf die stream-Klassen zurückgreifen sollte.


Anmelden zum Antworten