C++面试究竟在面什么(1)

这篇文章就是分析面试问题背后的需求,从而实现举一反三的面试效果

面试官:请算出XXX结构体的大小

考点:字节对齐
出现的原因:

  1. 为了部分老版本的CPU架构不支持非对齐访问的问题
  2. 提高本地内存的读取效率。

原则:

  • 结构体变量的首地址能够被其对齐字节数大小(系统寻址大小,受系统位数影响)所整除。
  • 结构体每个成员相对结构体首地址的偏移都是对应成员大小的整数倍,如不满足,对前一个成员填充字节以满足。
  • 结构体的总大小为结构体对最大成员大小的整数倍,如不满足,结构体最后填充字节以满足。

缺点:1,数据存储,会造成数据冗余;2,网络通信,收发平台不一致,导致解析出错;

面试官:请介绍纯虚函数

考点:纯虚函数、抽象类、接口类
出现的原因:只要有纯虚函数的类都叫做抽象类,该函数细节由派生类决定
抽象类出现原因:为了实现多态,服务于面向对象;将具体对象抽离出共性,减少代码重复度;常见使用场景是抽象工厂模式
原则:

  • 纯虚函数,首先是虚函数,其次是没有具体实现过程,写作=0
  • 抽象类一般使用方法,基类指针指向派生类对象,直接使用基类指针进行算法运算

面试官:静态类函数存放在哪?静态成员呢?什么时候被创建?什么时候被初始化?

考点1:程序的五层内存存储
作用:将内存划分不同区域,方便管理,对应不同的生命周期
内容:

区域作用表现形式(按内存中顺序排列)生命周期
代码段存放函数体的二进制代码,运行时被调用类成员函数…全局函数…静态类成员函数程序中止
全局段生命周期最长,全局变量编译时分配,其他类变量第一次使用时分配全局变量…静态类变量…静态自然变量程序中止
常量段只读的数据,减少内存使用‘123’,123程序中止
编译器自动分配释放函数的参数值,局部变量函数中止
按需申请程序员主动申请的内存块主动释放

注意:类成员若未被初始化(使用)的话,程序内存占用是没有变化的,除非初始化过。

面试官:内联函数的作用

考点:inline关键字
原本的作用:在使用该函数的地方,将函数视为一段代码段,减少函数开栈,提高性能
后面编译器自动检查函数是否符合内联要求,自动优化
因上述的原因,委员会对inline关键字进行升级(废物利用)
附加作用(C++17):定义写在.h文件中,在被多个地方引用该头文件,也不会出现重复定义报错😀。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值