C++面试八股文(Qt 新特性)
1. Qt 5 和 Qt 6 有什么主要区别?
面试回答:Qt 6 是对 Qt 5 的一次重大升级,主要区别体现在架构、底层实现和现代 C++ 支持方面:
- Qt 6 全面拥抱 现代 C++(C++17 及以上)
- 底层渲染架构重构,引入 RHI(Rendering Hardware Interface)
- 更好地支持多平台(桌面、嵌入式、移动端)
- API 更加统一和规范,清理了历史遗留接口
- 构建系统更推荐使用 CMake,弱化 qmake
Qt 6 在性能、可维护性和未来扩展性方面都有明显提升。
2. Qt 6 中移除了哪些模块?
面试回答:Qt 6 对部分过时或使用率较低的模块进行了移除或重构,主要包括:
- Qt Script(已废弃)
- Qt WebKit(被 Qt WebEngine 替代)
- Qt XmlPatterns
- Qt Quick Controls 1
- Qt Multimedia 中的部分旧接口
这些模块要么被新模块替代,要么需要使用第三方方案或 Qt 6 新接口实现。
3. Qt 6 的新特性有哪些?
面试回答:Qt 6 的主要新特性包括:
- RHI 渲染架构:支持 OpenGL、Vulkan、Metal、Direct3D
- 更高性能的 Qt Quick 和 3D 渲染
- 更好的高 DPI 和多屏支持
- 更清晰的模块依赖关系
- 对现代 C++ 特性的深度支持
- 跨平台行为更加一致
整体目标是为未来 10 年的 Qt 生态打基础。
4. C++11 / 14 / 17 / 20 的新特性在 Qt 中如何应用?
面试回答:Qt 在新版本中大量采用现代 C++ 特性:
- C++11:
auto、nullptr、constexpr、std::function、Lambda - C++14/17:结构化绑定、
if constexpr、std::optional - C++20:概念(Concepts)、协程(部分场景)
在 Qt 开发中,常用 Lambda 简化信号槽,使用智能指针管理资源,提高代码安全性和可读性。
5. Lambda 表达式在 Qt 信号槽中如何使用?
面试回答:Qt 支持直接使用 Lambda 作为槽函数,常用于简化代码和避免额外的槽函数定义。
典型用法包括:
- 直接在
connect()中处理简单逻辑 - 捕获局部变量
- 提高代码可读性
Lambda 槽特别适合一次性逻辑或 UI 事件处理。
6. 智能指针在 Qt 中如何使用?
面试回答:Qt 中既支持 Qt 自带智能指针,也支持标准库智能指针:
- QScopedPointer:作用域结束自动释放
- QSharedPointer:引用计数智能指针
- QWeakPointer:解决循环引用问题
- std::unique_ptr / std::shared_ptr:Qt 6 推荐使用
在使用 QObject 时,通常优先使用父子对象机制,非 QObject 类型资源更适合使用智能指针管理。
C++八股文全集 文章被收录于专栏
本专栏系统梳理C++技术面试核心考点,涵盖语言基础、面向对象、内存管理、STL容器、模板编程及经典算法。从引用指针、虚函数表、智能指针等底层原理,到继承多态、运算符重载等OOP特性从const、static、inline等关键字辨析,到动态规划、KMP算法、并查集等手写实现。每个知识点以面试答题形式呈现,注重原理阐述而非冗长代码,帮助你快速构建完整知识体系,从容应对面试官提问,顺利拿下offer。
