Oui et non.
Cela dépend de la version de C++ que vous utilisez.
- C++98 et C++03 ne prennent pas en charge
explicit
opérateurs de conversion de type
- Mais C++11 le fait.
Exemple,
struct A
{
//implicit conversion to int
operator int() { return 100; }
//explicit conversion to std::string
explicit operator std::string() { return "explicit"; }
};
int main()
{
A a;
int i = a; //ok - implicit conversion
std::string s = a; //error - requires explicit conversion
}
Compilez-le avec g++ -std=c++0x
vous obtiendrez cette erreur :
prog.cpp:13:20 : erreur : la conversion de 'A' en type non scalaire 'std::string' est demandée.
Démonstration en ligne : http://ideone.com/DJut1
Mais dès que tu écris :
std::string s = static_cast<std::string>(a); //ok - explicit conversion
L'erreur disparaît : http://ideone.com/LhuFd
BTW, en C++11, l'opérateur de conversion explicite est appelé "opérateur de conversion contextuelle" s'il se convertit en boolean . Par ailleurs, si vous souhaitez en savoir plus sur les conversions implicites et explicites, lisez cette rubrique :
J'espère que cela vous aidera.