来自基类的_forceinline虚函数是否在派生类中__forceinlined而没有明确说明它?

时间:2011-07-27 10:12:28

标签: c++ class virtual inline derived

假设我们有:

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


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

派生类中的函数A是虚拟的,没有明确说明它。派生类中的函数A是否也__forceinlined而没有明确说明它?

2 个答案:

答案 0 :(得分:3)

首先,无法内联函数 虚拟 - 编译器需要先获取vtable指针才能知道要调用哪个函数。并非所有标记为virtual的函数都被虚拟调用 - 这些函数可以内联。

然后,__forceinline不会传播到派生类实现 - 它是一个非标准的特定于编译器的关键字,它对每个函数都有效。因此,如果要强制内联,则必须在派生类函数中再次应用关键字。同样,它不能保证所有的呼叫都会被内联。

答案 1 :(得分:2)

这应记录在您正在使用的编译器中,但对我来说,“内联” - 无论是否强制,都不属于继承合同的一部分。所以,不,不应该。