Будет ли виртуальная функция _forceinline из базового класса __forceinlined в производном классе без явного указания? - PullRequest
2 голосов
/ 27 июля 2011

Предположим, у нас есть:

class Base
{
__forceinline virtual int A() {return 1;}
}


class Derived: public Base
{
    int A() 
    {
        return 2;
    }
}

Функция A в производном классе является виртуальной без явного указания этого.Будет ли функция A в производном классе также __forceinlined без явного указания этого?

Ответы [ 2 ]

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

Во-первых, функции , вызываемые виртуально , не могут быть встроены - компилятору необходимо сначала получить указатель на vtable, чтобы узнать, какую функцию вызывать.Не все функции, отмеченные virtual, вызываются виртуально - они могут быть встроенными.

Тогда __forceinline не будет распространяться на реализацию производного класса - это нестандартное ключевое слово для компилятора, которое оказываетфункция.Поэтому, если вы хотите принудительно встроить, вы должны снова применить ключевое слово в функции производного класса.Опять же, это не гарантирует, что все звонки будут встроены.

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

это должно быть задокументировано в компиляторе, который вы используете, но для меня «инлинность» - принудительная или нет - это то, что не является частью контракта на наследование. итак, нет, не должно.

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