C/C++面试:虚函数可以是内联函数吗?
发布日期:2022-03-16 03:25:37 浏览次数:43 分类:技术文章

本文共 850 字,大约阅读时间需要 2 分钟。

回答

  • 虚函数可以是内联函数,内联是可以修饰虚函数的,但是当虚函数表现动态性时就不能内联
  • 内联是在编译器建议编译器内联,而虚函数的多态性在运行期间,编译器无法知道运行期调用哪个代码,因此虚函数表现为多态性(运行期)不可以内联
  • inline virtual唯一可以内联的时候:编译器知道所调用的对象是哪个类(如 Base::who()),这只有在编译器具有实际对象而不是对象的指针或者引用时才会发生

代码实例如下:

#include 
using namespace std;// 基类class Base{
public: inline virtual void who(){
cout << "I am Base\n"; } virtual ~Base(){
}};// 派生类class Derived:public Base{
public: inline void who(){
// 不写inline时隐式内联 cout << "I am Derived\n"; }};int main(){
// 此处的虚函数 who(),是通过类(Base)的具体对象(b)来调用的,编译期间就能确定了,所以它可以是内联的,但最终是否内联取决于编译器。 Base b; b.who(); // 此处的虚函数是通过指针调用的,呈现多态性,需要在运行时期间才能确定,所以不能为内联。 Base *bptr = new Derived(); bptr->who(); // 因为Base有虚析构函数(virtual ~Base() {}),所以 delete 时,会先调用派生类(Derived)析构函数,再调用基类(Base)析构函数,防止内存泄漏。 delete bptr; bptr = nullptr; return 0;}

转载地址:https://blog.csdn.net/zhizhengguan/article/details/122665132 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:算法:如何借助BM算法轻松理解KMP算法?
下一篇:C/C++编程:STL关联式容器源码学习

发表评论

最新留言

路过按个爪印,很不错,赞一个!
[***.219.124.196]2024年03月29日 12时03分52秒