Извините, если в коде есть ошибки.В настоящее время пишет с мобильного.
Рассмотрим следующий сценарий:
class A
{
public:
int funX()
{
return funY()*5;
}
virtual int funY() = 0;
};
class B : public A
// public: A
{
public:
int funY() override final
{
// implementation
}
};
int foo(B& b)
{
return b.funX();
};
В этом коде у компилятора достаточно информации, чтобы определить, что ему нужно вызвать B::funY()
, фактически не вызывая его.Однако это было бы невозможно без ключевого слова final
.В противном случае можно отправить экземпляр возможного класса C
, который по-разному реализует funY()
.
Оптимизируют ли его компиляторы или нет?