Explizit und Implizit



  • Ich gebe es ja zu, in Mathematik hab ich nie aufgepasst. Mich wundert es, dass ich logisch Denken kann. (Kann ich das?)

    Mich würde interessieren, welche Bedeutung "explizit" und "implizit" bei C++ hat. Es hat doch etwas mit Initialisierungen zu tun, oder?

    Kann mir das jemand bitte genau erklären?



  • Hallo,

    implizit kann mehrere Bedeutungen haben, die bekannteste (und einzige dir mir grad einfällt) ist wohl: Implizite Umwandlungen. Ein Beispiel:

    void foo(long l) {
    
    };
    
    ...
    
    int i = 7;
    foo(i);
    

    Hier wird i ohne weiters in long umgewandelt, implizit, ohne dass du casten musst.

    Explizit kann man am Konstruktor zeigen:

    //int-Wrapper
    class Integer {  
      int value;
    
    public:
      explicit Integer(int i=0) : value(i) {}  //Expliziter Konstruktor
    
      //und der ganze andere rest...
    };
    
    void foo(const Integer &i) {
    
    };
    
    int i = 7;
    foo(i);  //Geht nicht!
    

    Aber warum geht's nicht? Weil dieses explicit Schlüsselwort sagt, dass eine implizte Konvertierung des ints in ein Integer (den Konstruktor gibt es ja eigentlich) nicht erlaubt ist. Wäre der Ctor nicht explicit, würde es klappen.

    MfG

    GPC



  • Allgemein bedeutet implizit "stillschweigend, eingeschlossen, automatisch" und explizit "ausdrücklich, eindeutig".

    Es gibt in C++ mehrere Bedeutungen dieser Wörter. Beispielweise muss bei einer Typkonvertierung ohne Wertverlust nicht ausdrücklich gecastet werden (es wird implizit umgewandelt):
    float f = 2; // Implizit
    int i = (int)2.0f; // Explizit

    Zusätzlich gibt es das Schlüsselword explicit, dass als Modifizierer eines Ctor mit einem Parameter benutzt werden kann. Konstruktoren mit einem Parameter werden zur impliziten Typkonvertierung benutzt. Durch Angabe von explicit vor so einen Konstruktor wird die implizite Konvertierung verboten und man muss immer explizit den Konstruktor aufrufne:
    http://www.glenmccl.com/tip_023.htm



  • Okay danke.


Anmelden zum Antworten