在没有显式声明的情况下,基类中的虚函数是否会在派生类中被__forceinline ?
Will _forceinline virtual function from base class be __forceinlined in derived class without explicitly stating it?
假设:
class Base
{
__forceinline virtual int A() {return 1;}
}
class Derived: public Base
{
int A()
{
return 2;
}
}
派生类中的函数A是虚函数,无需显式声明。函数A在派生类也__强制内联没有显式声明吗?
首先,虚调用的函数不能内联——编译器需要首先获得虚值表指针才能知道调用哪个函数。并不是所有标记为virtual
的函数都被虚拟调用——它们可以内联。
那么,__forceinline
将不会传播到派生类实现—它是一个非标准的特定于编译器的关键字,对每个函数都有影响。因此,如果您想强制内联,则必须在派生类函数中再次应用关键字。同样,它不能保证所有调用都是内联的。
这应该在您正在使用的编译器中记录,但对我来说,"内联"——无论是否强制,都不是继承契约的一部分。所以,不,不应该。
相关文章:
- 为什么使用 "this" 指针调用派生成员函数?
- 具有奇怪重复模板模式的派生类中的成员变量已损坏
- 在派生函数中指定void*参数
- 如何通过派生类函数更改基类中的向量
- 如何委托派生类使用其父构造函数?
- 如何使用单独文件中的派生类访问友元函数对象
- 派生类销毁的最佳实践是什么
- 如何使用基类指针引用派生类成员
- 派生类是否可以在抽象工厂设计模式中具有数据成员
- 使用基类指针创建对象时,缺少派生类析构函数
- 如何引用基类的派生类?
- 存储模板类型以强制转换回派生<T>
- 需要从 istream 和 ostream 派生 iostream
- 在 C++ 中用派生类型重写成员函数
- 具有多个类、派生类的C++正向声明
- 有没有一种"cleaner"的方法可以在指向基的指针向量中找到派生类的第一个实例?
- 用常见虚拟函数实现的任意组合来实现派生类的正确方法是什么
- 如果基类包含双指针成员,则派生类的构造函数
- 为什么此派生对象无法访问基类的后递减方法?
- 有没有比在库中添加一个并非由所有派生类实现的新虚拟函数更好的设计实践