что будет с встроенными функциями внутри виртуальных функций? - PullRequest
0 голосов
/ 21 февраля 2010

Что произойдет, если я использую встроенную функцию внутри виртуальной функции? Я запутался с такими вопросами, как http://www.parashift.com/c++-faq-lite/value-vs-ref-semantics.html#faq-31.6

Я могу это понять, но значит ли это, что бессмысленно использовать (вызывать) встроенные функции внутри виртуальных функций (пожалуйста, предположим, что он вызывается динамически)?

class Wrapper
{
public:
   inline void doInlineJob() {;}
};

class Base
{
   virtual void foo()
   {
     //Do something
   }
};

class Derived: public Base
{
    void foo()
    {
      wrapObj.doInlineJob();
    }

    Wrapper wrapObj;
};

Ответы [ 2 ]

9 голосов
/ 21 февраля 2010

Не имеет значения, является ли foo виртуальным или нет. Имеет значение только то, является ли doInlineJob виртуальным. Это не так, поэтому его можно без проблем встроить.

2 голосов
/ 21 февраля 2010

Что произойдет, если я использую встроенную функцию внутри виртуальной функции?

Ничего особенного. Если компилятор согласится, он будет встроен, если нет, не будет. Как и в любой другой функции.

(Обратите внимание, что в FAQ говорится о функциях, которые сами inline и virtual одновременно. Это другое.)

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