Будет ли виртуальный вызов функции встроен, когда это будет возможно? - PullRequest
2 голосов
/ 23 мая 2019

Извините, если в коде есть ошибки.В настоящее время пишет с мобильного.

Рассмотрим следующий сценарий:

 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().

Оптимизируют ли его компиляторы или нет?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...