Funktionsüberladung ... denkste!



  • Wisst ihr wie lange ich den Fehler gesucht habe?
    Wollt ihr auch bestimmt lieber nicht wissen...

    void func(const std::string& text)
    {
    	cout << "TEXT: " << text << endl;
    }
    
    void func(bool flag)
    {
    	cout << "FLAG: " << flag << endl;
    }
    
    int main()
    {
    	func("jaja blabla");
    }
    

    Warum verdammt noch mal wird die bool func aufgerufen?

    👎 😡



  • Erboster User schrieb:

    Warum verdammt noch mal wird die bool func aufgerufen?

    Weil du kein std::string sondern ein char* vorliegen hast, und Zeiger im wesentlichen Integerwerte sind... Gut, man könnte jetzt streiten ob der Compiler nicht eine Warnung bringen müsste, aber ein Zeiger als solches ist halt auch kein string.

    cu André



  • Hmm, aber std::string bietet doch keinen Konstruktor für const char*, also sollte das doch die bessere Übereinstimmung sein? const char* zu bool halte ich schon für ziemlich merkwürdig. 😮



  • @Huh
    Naja, stimmt schon, ist für den Compiler dasselbe wie const bool*...
    Schade eigentlich...



  • asc schrieb:

    und Zeiger im wesentlichen Integerwerte sind

    😕

    Huh schrieb:

    Hmm, aber std::string bietet doch keinen Konstruktor für const char*, also sollte das doch die bessere Übereinstimmung sein? const char* zu bool halte ich schon für ziemlich merkwürdig.

    Es ist schon richtig, dass std::string einen Konstruktor const char * bietet. Trotzdem handelt es sich dabei um eine benutzerdefinierte Umwandlung und diese wird einfach schlechter bewertet als eine Standardumwandlung.

    Zu den Standardumwandlungen gehören aber eben auch die Uwandlungen von z.B. int, double und Pointern nach bool. Deshalb ist diese Funktion auch letztlich die geeignetste.



  • Mach es doch explizit:

    func(std::string("jaja blabla"));
    


  • oder mach einfach einen 3. overload für "const char*".


Anmelden zum Antworten