当前位置: 首页 > news >正文

【C++面经】1-5

谈一谈对内联函数的理解

内联函数,指一个函数被inline修饰。在编译时,会在调用内联函数的地方展开,没有调用函数创建栈帧的开销,可有效提高程序运行效率。

内联函数主要适用于逻辑简单,频繁调用的函数。它相对于宏有类型检查、作用域限制、参数只求值一次等优点。但过度使用会导致代码膨胀,反而降低性能。

是一种对编译器的一种优化建议,编译器最终决定是否内联。

struct和class的区别

struct的默认访问限定符是public,class是private。

struct的默认继承方式是public,class是private。

struct不可以定义模板参数,class可以,就像typename一样。

C语言中:struct是数据的集合,C++中:class是数据和方法的集合。

vector和list的区别

vector

内存连续,在堆中开空间,减少大小,内存不释放。

优点:支持随机访问,因为内存连续,所以高速缓存命中率高,时间复杂度O(1)。

缺点:插入、删除会对数据进行移动,时间复杂度O(n),内存不足需扩容。

list

双向链表,堆中开空间,内存不连续,通过指针对数据进行访问。

优点:插入、删除数据时间复杂度O(1)。

缺点:空间不连续,不支持随机访问,查找数据时间复杂度O(n)。

常量指针和指针常量

常量指针:例如const int* p;指针指向的内容只能读,不能改。

指针常量:例如int* const p;指针的指向不能改,但内容可以改。

malloc/free和new/delete的区别

共同点:都从堆上申请空间,都需要手动释放。

不同点:

1.malloc申请空间不会初始化,new会初始化。

2.malloc申请空间时需要手动计算发小,new只需要传类型即可。

3.malloc的返回值是void*,使用需要强转,new不需要。

4.malloc申请失败的返回值是NULL,需要对返回值判断,new申请失败会抛异常。

5.申请自定义对象时,malloc只开空间,不调用构造函数,free只会释放空间,不调用析构函数。new申请空间后会调构造函数完成初始化,delete释放空间前会调析构函数清除空间内的资源。

http://www.jsqmd.com/news/1078831/

相关文章:

  • 服务定位器中的依赖查找与实例管理
  • 分布式系统设计最佳实践
  • 注入燃料——Entity Framework Core 与 Code First 实战
  • 品牌建设化技术品牌价值度量与传播效果评估
  • AI 建议直接升级依赖版本,为什么编译通过后仍可能在运行时 `NoSuchMethodError`
  • WeChatMsg完全指南:重新掌控你的数字记忆,做个人数据的主人
  • 移动端开发工具链
  • 如何正确地“拷贝”一个对象?(深拷贝与浅拷贝)
  • Navicat密码查看工具:终极解决方案帮你找回忘记的数据库密码
  • LSTM股价预测实战:金融时序建模的工程化落地指南
  • GEO优化公司能解决企业的什么问题?从AI搜索流量到品牌认知的全面解读
  • [AI][昇腾950] Atomic 操作说明
  • 技能进阶与Claude Design初体验
  • 终极修复指南:快速恢复DSM 7.2+群晖Video Station功能
  • 深度学习系统设计思考
  • 自然语言处理实践
  • Android权限管理实战:easypermissions库简化运行时权限请求
  • 【JAVA毕设源码分享】基于SpringBoot的智慧药店药品信息管理系统的设计与实现(程序+文档+代码讲解+一条龙定制)
  • AI写论文神器来袭!4款AI论文生成工具,让论文写作更高效!
  • 免费获取专业级字体:Montserrat完整使用终极指南
  • 农业物联网中的精准灌溉与作物生长模型
  • Github 开源社区中 AMD ROCm 相关项目的筛选技巧
  • 软件访问者管理化的操作元素分离
  • Gophish管理员密码丢失?SQLite数据库哈希重置实战指南
  • 高端制造 半导体与集成电路 溅射靶材、CMP 抛光耗材行业|技术管理主线完整晋升 CTO 岗位阶梯
  • 【JAVA毕设源码分享】基于SpringBoot技术的防盗门进销存管系统的设计与实现(程序+文档+代码讲解+一条龙定制)
  • Buzz:终极开源语音转录工具,打造高效音频处理工作流
  • 中兴光猫超级管理员权限获取完整指南:3步开启工厂模式
  • Kubernetes Pod 重启策略解析
  • 告别下载烦恼:3步解锁全网视频音频资源的终极解决方案