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