#include <iostream> using namespace std; class A { virtual void func() { cout << "zz\n"; } virtual void prin(); }; inline void A::prin() { cout << "h"; } int main() { return 0; }
为什么inline可以修饰virtual函数呢?虚函数调用不是要在运行时才能确定吗?而inline不是要在编译时就展开吗?
拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...
作用非常有限,编译器通常会无视inline修饰,当然也有例外:inline virtual只有当对象类型在编译时被确定时才会起作用,也就是调用这个inline virtual的caller不能是引用或者指针,可以是局部变量,static变量,全局变量。这个时候编译器可能会把这个virtual function优化成普通成员函数inline掉,但是否这么做取决权在编译器,不能得到保证。
作用非常有限,编译器通常会无视inline修饰,当然也有例外:
inline virtual只有当对象类型在编译时被确定时才会起作用,也就是调用这个inline virtual的caller不能是引用或者指针,可以是局部变量,static变量,全局变量。这个时候编译器可能会把这个virtual function优化成普通成员函数inline掉,但是否这么做取决权在编译器,不能得到保证。