Considérer ce morceau de code:
struct Base
{
int x;
};
struct Bar : Base
{
int y;
};
struct Foo : Base
{
int z;
};
Bar* bar = new Bar;
Foo* foo = new Foo;
Base* returnBase()
{
Base* obj = !bar ? foo : bar;
return obj;
}
int main() {
returnBase();
return 0;
}
Cela ne fonctionne pas sous Clang ou GCC, ce qui me donne :
erreur: expression conditionnelle entre les différents types de pointeur ‘Foo*' et ‘*' manque un cast de Base* obj = !bar ? foo : bar;
Ce qui signifie pour compiler, j'ai modifier le code pour :
Base* obj = !bar ? static_cast<Base*>(foo) : bar;
Depuis un cast implicite à un Base*
existe, ce qui est d'empêcher le compilateur de le faire?
En d'autres termes, pourquoi est - Base* obj = foo;
travail sans un plâtre, mais à l'aide de l' ?:
opérateur n'en a pas? Est-ce parce qu'il n'est pas clair que je veux utiliser l' Base
de la partie?