Konstruktor als "explicit" deklarieren



  • Guten Abend!

    Ich habe mir eben eine Highscorelisten-Klasse zusammengebastelt, deren
    Konstruktor einen int Parameter erhält.

    class CHighscore
    {
    public:
        CHighscore(int nEntries);
        // ...
    
    private:
        // ...
    };
    

    Um sicherzugehen, dass wirklich mit einem ganzzahligen Wert konstruiert
    wird, habe ich später den Konstruktur als "explicit" deklariert.
    Allerdings habe ich folgendes getestet:

    int main()
    {
        CHighscore highscore('5'); // Implizite Konvertierung wurde doch verboten?
    }
    

    und der Compiler (g++) hat weder einen Fehler noch eine Warnung ausgegeben.

    Ich gehe mal stark davon aus, dass ich den Sinn von "explicit" falsch
    verstanden habe, also bitte um Aufklärung 😃

    gruß,
    walker



  • Du hast damit eine implizite Konvertierung von int nach CHighscore verboten, aber natürlich nicht die Konvertierung von char nach int 🙂



  • explicit verhindert nur:

    CHighscore highscore = 42;
    


  • std::vector<CHighscore> highscorelists;
    
    highscorelists.push_back(10); // Wuerde somit auch nicht mehr funktionieren oder?
    

    Ok, ich glaub ich habs verstanden 😉

    Vielen Dank!

    gruß,
    walker


Anmelden zum Antworten