Почему оператор приведения типов не работает с унаследованным классом? - PullRequest
5 голосов
/ 27 июля 2011

У меня есть два класса:

struct B {};
struct D {
  operator B& ();
};

Когда я это сделаю;

b = d; // B b; ... D d;

Результат соответствует ожиданиям, когда вызывается D::operator B&() ( Демо ).

Если D изменяется на

struct D : B {
  operator B& ();
};

, то D::operator B&() не вызывается ( Demo ).B::B(const B&) находит лучшего кандидата в D, чем D::operator B&()?

1 Ответ

7 голосов
/ 27 июля 2011

Если D происходит от B, существует неявное автоматическое преобразование из D в B.Это имеет более высокий приоритет, чем пользовательский оператор преобразования.

...