Disons que j'ai le code suivant:La conversion de ce implicitement à l'aide d'un opérateur de conversion défini par l'utilisateur
class Base
{
};
class Foo
{
public:
Foo(Base* base)
{
}
};
class BarBase
{
public:
operator Base*()
{
return base;
}
private:
Base* base;
};
class Bar : public BarBase
{
public:
Bar()
{
Foo* foo = new Foo(this);
}
};
Le code ne peut pas compiler avec l'erreur suivante sur GCC 6.3:
prog.cpp: In constructor ‘Bar::Bar()’:
prog.cpp:30:26: error: no matching function for call to ‘Foo::Foo(Bar*)’
Foo* foo = new Foo(this);
^
BarBase
que Bar
dérive de a un opérateur de conversion défini par l'utilisateur pour Base*
. Pourquoi this
n'obtient implicitement converti en Base*
en utilisant l'opérateur de conversion susmentionné?
@Piotr Skotnicki Pourquoi avez-vous supprimé l'étiquette C++ 14? La question était pour C++ 14, qui est actuellement la dernière norme que le compilateur que j'utilise supporte. – tambre
Parce que le problème ici n'a rien à voir avec les fonctionnalités C++ 14. – songyuanyao
@songyuanyao Dans ce cas, je voulais savoir pourquoi il en est ainsi dans la révision standard C++ 14, qui est la version standard que je développe pour). Il peut être légèrement différent dans C++ 03 ou une autre révision standard C++. Toujours bon d'être explicite. – tambre