C++面试题整理 2

8. C++11新特性又哪些

自动类型推导auto,智能指指针(share_ptr,unique_ptr等),for循环简化,线程相关的(std::thread/std::mutex),空指针nullptr,lambda表达式,等等

9. share_ptr是线程安全的吗

share_ptr里包含引用计数和数据指针,引用计数是原子操作,线程安全的,但是改变数据指针的指向,后导致引用技术加减,并不是线程安全的。设想当一个share_ptr的引用计数为1,这时两个线程同时对它赋值,改变其数据指向,则会引起引用计数减小2次,引起crash。

10. 线程间同步有哪些方法

主要有锁/临界区(lock/mutex),条件变量(condition variable)和future。

  • std::unique_lock<std::mutex>或 std::lock_guard<std::mutex>可以保证一次只有一个线程访问临界区
  • std::condition_variable 可以通过wait方法阻塞线程,另一个线程可以通过Notify方法进行通知
  • std::future配合std::async使用,可以异步开启线程,并存储返回结果,另一线程通过future的wait或get方法可以阻塞线程,直至结果返回。

参考资料:

  1. C++11 线程同步接口std::condition_variable和std::future的简单使用

11. 虚函数多态的实现机制

虚函数多态主要指的是基类指针(引用)调用虚函数,若基类指针(引用)指向的是派生类,则自动调用派生类的虚函数。其实现机制是通过虚函数表 和虚表指针。在含有虚函数的类编译时,会自动生成相应的虚函数表和虚表指针,虚函数表里对于派生类重写的虚函数,会替换成重写后的虚函数地址。这样派生类赋值给基类时,实际上是基类之类指向的是派生类的虚表指针和虚函数表,调用的就是派生类的虚函数了。

12. 子类构造函数中调用虚函数会怎么样

子类在构造时会先调用父类构造,再调用子类构造,所以在子类中调用虚函数,如果子类重写了,会调用重写后的子类函数,没有重写的话,仍会调用父类函数。

  • 注意:如果在父类构造中调用虚函数,则子类继承后总会调用父类的虚函数,如果虚函数为纯虚,会产生链接错误。

另外尽量不要在构造中调用虚函数,参见《effective C++》条款9--绝不在构造和析构过程中调用virtual函数

13. 介绍下C++ 11中的移动语义

移动语义即std::move关键字的使用,配合移动构造,可以将临时变量直接进行构造,节省一次赋值操作和临时变量的析构,提高了效率。

14. std::vector中插入元素的push_back与embrace_back有什么区别

embrace_back是C++11中新的接口,由于C++11有了移动语义,对于vector中插入元素,也用移动语义重写了,对于临时元素可以移动构造,节省了空间,提高了效率

更多

相关推荐
考研保研资料分享7 小时前
2022环境工程保研北师大:三校专业追问、论文贡献与择校复盘
面试
akinggw8 小时前
libsherpacore - 基于 sherpa-onnx 的 C++ 语音交互静态库
c++·交互·语音识别
xiaoye-duck8 小时前
《C++ 项目:手写大模型接入 SDK》ChatGPT接口设计(中):全量响应实现和测试
网络·c++·语言模型·chatgpt
東隅已逝,桑榆非晚9 小时前
算法3.双指针法-快乐数
c++·笔记·学习·算法
eggwyw9 小时前
C++相交链表和反转链表详解
开发语言·c++
杜 硕9 小时前
从零开始的C++生活——第六讲——02
c++·算法·生活
小超人诞生日记10 小时前
C++ STL 反向迭代器:从源码框架到适配器实现
c++·算法
青少儿编程课堂10 小时前
蓝桥杯青少组图形化 + 全国青少年信息素养大赛 + 电子学会Scratch考级:校园成语接龙大挑战解析
c++·python·算法·bfs·信息学竞赛
小贾要学习10 小时前
【C++后端开发项目】Reactor 模型 / C++ 仿写 muduo HTTP 服务器:让底层网络库真正跑起网页
linux·服务器·c++·http·网络编程·muduo·reactor模型
Rain的Java大神之路10 小时前
面试官让你把 LLM、RAG、Agent、MCP 串起来讲清楚,90% 的 Java 工程师当场露馅
java·后端·面试