Когда я пытаюсь это сделать, Visual Studio выдает мне ошибку cannot convert from 'A<T>' to 'B<T>'
Поэтому я попытался изменить тип переменной f
с B<int>
на A<int>
, и она скомпилирована правильно.Вот что у меня есть:
int main()
{
// Fine
A<int> a(5);
A<int> b(2);
A<int> c = a - b;
std::cout << c.x() << std::endl;
// does compile :)
B<int> d(5);
B<int> e(2);
A<int> f = d - e;
std::cout << f.x() << std::endl;
return 0;
}
Однако я не думаю, что это то, что вы хотите, потому что, если вы нашли способ преобразовать f из B в A, вы обнаружите, что все элементы данных специфичныдо Б было стерто.Если вы думаете о том, что процессор делает под капотом, это имеет смысл.Когда он видит, что типом возврата operator-
является A, он возвращает ровно sizeof(A)
байтов данных.Любые дополнительные данные поверх этого (такие как данные, связанные с B) отсекаются.Поэтому для безопасности компилятор скажет вам, что вам не повезло, если вы попытаетесь поместить возвращаемое значение в переменную типа B.