C++面试常见概念--inline、virtual、static汇总总结

53 篇文章 0 订阅
8 篇文章 0 订阅

inline内联函数
简单来说,编译器将inline函数体代码直接复制到inline函数调用点处而非普通函数的函数调用,有点像宏但是比宏更安全会,会做安全检查或自动类型转换。
特点:
省去了参数压栈、栈帧开辟与回收,结果返回等,加快运行速度;
大多类的成员函数(没有循环递归、定义在内类或显示内联等)会自动转化为内联函数;
但是也会造成代码膨胀、版本迭代不便、程序员不可控缺点。


virtual虚函数

  • 普通虚函数
    一般讲到虚函数大家都会告诉你创建了一张虚表Vtable,实现了多态的机制。
    那什么是多态机制呢?就是父类指针可以直接指向子类实例,通过父类的指针调用实际子类的成员函数,实现父类的多种形态。
    那为什么父类指针可以直接指向子类实例呢?这就是虚表的功劳了,子类对应的虚表中首先写入父类函数地址,如果有同名同参函数则替代相应函数地址,也就是说子类虚表中包含任何父类可调用函数的地址(或替换地址)。
    特点:
    构造函数不是虚函数,析构函数是虚函数;
  • 纯虚函数
    C++中包含纯虚函数的类,被称为是“抽象类”。抽象类不能使用new出对象,只有实现了这个纯虚函数的子类才能new出对象。纯虚函数“只提供申明,没有实现”,纯虚函数必须在子类(sub class)中实现该函数才可以使用。
    特点:
    不能被实例化

static静态函数、变量

  • 静态变量
    全局静态变量:与普通全局变量不同,普通全局变量对全局所有文件可见,容易出现重名混淆等问题,static则不必担心命名冲突。
    局部静态变量:生存期为整个源程序,但是其作用域仍与自动变量相同,只能在定义该变量的函数内使用该变量。
    静态变量默认初始化为0。
  • 静态成员函数
    特点:
    类的静态成员函数是属于整个类而非类的对象;
    不能将静态成员函数定义为虚函数;
    初始化在类体外进行,而前面不加static,以免与一般静态变量或对象相混淆。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值