char + literal + std::string



  • Hi!

    Warum gibt das ...

    std::string str = "blabla";
    cout << (char)97 + "literal" + str << endl;
    

    ... nur "blabla", und manchmal sogar vorher noch was ganz komisches, aus?
    Ohne dem Literal funktioniert es aber, doch das Literal wird doch eh implizit zu std::string gecastet?

    😕



  • Kommt draufan ob char + string literal ODER string literal + std::string zuerst gerechnet wird...

    Edit

    doch das Literal wird doch eh implizit zu std::string gecastet?

    Nein, nicht prinzipiell... und gecastet wird hier sowiso nichts, wenn schon, dann konstruiert...



  • Ja, aber in meinem Fall?
    Und woran liegts nun?



  • steps doch mal durch mit dem debugger...



  • Ja denn du nutzt den + Operator der datentypen char und char* in diesem Zusammenhanng falsch. In diesem Ausdruck wird die Addresse des String-Literals zur 97 hinzuaddiert und was der mit dem Objekt macht weiß ich jetzt auch nicht. Jedenfalls kommt es dann zu einer unsinnigen Ausgabe. Korrekt wäre

    cout << (char)97 << "literal" << str;
    


  • cout kann ich aber in der konkreten Anwendung nicht benutzen.
    Naja, dann werde ich halt den Konstruktor von std::string verwenden (mit 1x char x füllen).



  • Addier0r schrieb:

    cout kann ich aber in der konkreten Anwendung nicht benutzen.

    Dann führe deine Helfer nicht in die Irre indem du es in deinem Code so zeigst.
    op+ ist linksassoziativ, du könntest alternativ einfach einen leeren string voranstellen:

    std::string() + (char)90 + "literal" + str
    

Anmelden zum Antworten