在没有显式声明的情况下,基类中的虚函数是否会在派生类中被__forceinline ?

Will _forceinline virtual function from base class be __forceinlined in derived class without explicitly stating it?

本文关键字:派生 forceinline 是否 函数 情况下 声明 基类      更新时间:2023-10-16

假设:

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

class Derived: public Base
{
    int A() 
    {
        return 2;
    }
}
派生类中的

函数A是虚函数,无需显式声明。函数A在派生类也__强制内联没有显式声明吗?

首先,虚调用的函数不能内联——编译器需要首先获得虚值表指针才能知道调用哪个函数。并不是所有标记为virtual的函数都被虚拟调用——它们可以内联。

那么,__forceinline将不会传播到派生类实现—它是一个非标准的特定于编译器的关键字,对每个函数都有影响。因此,如果您想强制内联,则必须在派生类函数中再次应用关键字。同样,它不能保证所有调用都是内联的。

这应该在您正在使用的编译器中记录,但对我来说,"内联"——无论是否强制,都不是继承契约的一部分。所以,不,不应该。