假设我们有:
class Base
{
__forceinline virtual int A() {return 1;}
}
class Derived: public Base
{
int A()
{
return 2;
}
}
派生类中的函数 A 是虚函数,没有明确说明。派生类中的函数 A 也会在没有明确说明的情况下被 __forceinlined 吗?
首先,虚拟调用的函数不能内联 - 编译器需要首先获取 vtable 指针才能知道要调用哪个函数。并非所有标记的函数virtual
都被虚拟调用 - 可以内联。
然后,__forceinline
不会传播到派生类实现——它是一个非标准的编译器特定关键字,对每个函数都有影响。因此,如果要强制内联,则必须在派生类函数中再次应用关键字。同样,它不能保证所有调用都会被内联。
这应该记录在您正在使用的编译器中,但对我来说,“内联性”——无论是否强制,都不是继承合同的一部分。所以,不,不应该。