std::string::operator=( char c )



  • Hi,

    mich nervt der operator=(char c) der std::string Klasse total. Geht euch das nicht so? Kürzlich erst:

    std::string s = Var;
    

    "Var" war erst ein string und ist dann zum integer geworden. Ich dachte, der Compiler zeigt mir alle Probleme auf, Typsicherheit und so, aber nix da. Grml!

    Musste ich nur mal loswerden.

    Versteh ich echt nicht, op=(char) braucht man doch praktisch nie. Und wenn, tut's ein assign oder so auch.



  • Was du da gepostet hast ist aber nicht der op=, sondern der Konstruktor. Und einen Ctor, der ein char oder einen passenden Typ erwartet, gibts nicht.

    Wenn du einfach den Typen einer Variablen änderst, solltest du auch gleich schauen, wo du damit gearbeitet hast und die Stellen entsprechend anpassen. Das Problem ist hausgemacht, dafür solltest du also nicht die Sprache verantwortlich machen 🙂



  • Ja ja, ich meinte eigentlich

    std::string s;
    s = IntVar;
    

    Hausgemacht klar, aber ich will Typsicherheit. Und Prinicplie of Least Surprise. Und ich war richtig surprised.

    Stört dich das echt nicht, ist dir das noch nie über den Weg gelaufen??



  • Ich versteh nicht was die Überraschung sein soll. Was dachtest du denn sei in s danach drin und was war stattdessen drin?.



  • brotbernd schrieb:

    Ich versteh nicht was die Überraschung sein soll. Was dachtest du denn sei in s danach drin und was war stattdessen drin?.

    s war ja erst int und irgendwo z.B. wurde ihm -1 als ungültige ID zugewiesen. Ich hatte gar nicht erst damit gerechnet, dass s=-1 kompiliert (mit s als std::string), das war die Überraschung. Bei s=123 wäre für mich die geringste Überraschung eine int-to-str-Konvertierung; jedenfalls prinzipiell, für C++ weiß ich ja, dass es das so nicht gibt. Aber dass bei s=65 ein s=="A" herauskommt, das finde ich allermäßigst unintuitiv.



  • Orrrrk schrieb:

    Ja ja, ich meinte eigentlich

    std::string s;
    s = IntVar;
    

    Hausgemacht klar, aber ich will Typsicherheit. Und Prinicplie of Least Surprise. Und ich war richtig surprised.

    Verständlich. Zumal das einer der Fälle ist, wo man die implizite Konvertierung int -> char im Hinterkopf haben sollte, aber nicht unbedingt hat.

    Stört dich das echt nicht,

    Wenig. Dass die Konvertierung int->char möglich ist, ist eines der üblichen Verdächtigen bei Problemen. Wenn ich also mit strings und Ganzzahlen zu tun hab denke ich an sowas.

    ist dir das noch nie über den Weg gelaufen??

    Kann ich mich nicht dran erinnern.



  • Orrrrk schrieb:

    Aber dass bei s=65 ein s=="A" herauskommt, das finde ich allermäßigst unintuitiv.

    Das kommt halt darauf an aus welcher Ecke man kommt. Für mich war bei irgendwelchen Skriptsprachen ein s=65 -> s=="65" zunächstmal sehr überraschend (was nicht heißen soll, dass das durchaus intuitiv und bequem sein kann).


Anmelden zum Antworten