2

假设我们有:

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


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

派生类中的函数 A 是虚函数,没有明确说明。派生类中的函数 A 也会在没有明确说明的情况下被 __forceinlined 吗?

4

2 回答 2

3

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

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

于 2011-07-27T10:14:46.357 回答
2

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

于 2011-07-27T10:16:38.460 回答