Mit dem C++ Schlüsselwort „explicit“ kann man dem Compiler implizite Typumwandlungen verbieten. Dies kann manchmal ja auch ungewollt passieren, wie folgendes Beispiel zeigt:
#include <iostream> #include <windows.h> struct MyClass { MyClass(const char* name) : m_Name(name) {} virtual ~MyClass() {} const char* Who() const { return m_Name; } private: const char* m_Name; }; struct MyExplicitClass { explicit MyExplicitClass(const char* name) : m_Name(name) {} virtual ~MyExplicitClass() {} const char* Who() const { return m_Name; } private: const char* m_Name; }; int main() { MyClass A("a"); MyExplicitClass B("b"); A = "c"; // ok, hier funktioniert das, aber war das auch so gewollt? // Auf den ersten Blick zu durchschauen ist diese Zuweisung jedenfalls nicht. B = "d"; // error C2679: Binärer Operator '=': Es konnte kein Operator gefunden werden, // der einen rechtsseitigen Operanden vom Typ 'const char [2]' akzeptiert (oder // keine geeignete Konvertierung möglich) std::cout << "A: " << A.Who() << std::endl; std::cout << "B: " << B.Who() << std::endl; return 0; }


