 <p>There are two ways user-defined types can be implicitly converted:</p> <ol> <li>With a conversion constructor (e.g. "std::string::string(const char* c_string)").</li> <li>With a conversion operator (e.g. "OldType::operator NewType() const").</li> </ol> <p>Any constructor that takes a single parameter and does not use the keyword "explicit" defines an implicit conversion (from the type of the parameter, to the type of the object being constructed). The standard string class intentionally does not use "explicit" in order to provide the convenience of this conversion.</p>