Je suis assez surpris que ce struct
, qui est seulement explicitement convertible en bool
, fonctionne très bien dans une déclaration if
:explicite et conversion implicite
struct A
{
explicit operator bool() const
{
return m_i % 2 == 0;
}
int m_i;
};
int main()
{
A a{ 10 };
if (a) // this is considered explicit
{
bool b = a; // this is considered implicit
// and therefore does not compile
}
return 0;
}
Pourquoi est-il? Quelle est la raison de conception derrière le standard C++? Personnellement, je trouve plus explicite la deuxième conversion que la première. Pour le rendre encore plus clair, je me serais attendu le compilateur forçant à avoir les éléments suivants pour les deux cas:
int main()
{
A a{ 10 };
if ((bool)a)
{
bool b = (bool)a;
}
return 0;
}
Oui, dans 'if' est comme une conversion explicite en bool. (Vous ne pouvez pas être plus explicite que d'utiliser 'if' pour convertir en 'bool'!). http://en.cppreference.com/w/cpp/language/explicit – alfC