CppGuide社区 CppGuide社区
首页
  • 🔥最新谷歌C++风格指南(含C++17/20)
  • 🔥C++17详解
  • 🔥C++20完全指南
  • 🔥C++23快速入门
🔥C++面试
  • 第1章 C++ 惯用法与Modern C++篇
  • 第2章 C++开发工具与调试进阶
  • 第3章 C++多线程编程从入门到进阶
  • 第4章 C++网络编程重难点解析
  • 第5章 网络通信故障排查常用命令
  • 第6章 网络通信协议设计
  • 第7章 高性能服务结构设计
  • 第8章 Redis网络通信模块源码分析
  • 第9章 服务其他模块设计
  • 🚀 全部章节.pdf 下载 (opens new window)
  • 🔥C++游戏编程入门(零基础学C++)
  • 🔥使用C++17从零开发一个调试器 (opens new window)
  • 🔥使用C++20从零构建一个完整的低延迟交易系统 (opens new window)
  • 🔥交易系统开发岗位求职与面试指南统 (opens new window)
  • 🔥使用C++从零写一个C语言编译器 (opens new window)
  • 🔥从零用C语言写一个Redis
  • leveldb源码分析
  • libevent源码分析
  • Memcached源码分析
  • TeamTalk源码分析
  • 优质源码分享 (opens new window)
  • 🔥远程控制软件gh0st源码分析
  • 🔥Windows 10系统编程
  • 🔥Linux 5.x内核开发与调试 完全指南 (opens new window)
  • TCP源码实现超详细注释版.pdf (opens new window)
  • Go系统接口编程
  • 高效Go并发编程
  • Go性能调优
  • Go项目架构设计
  • 🔥使用Go从零开发一个数据库
  • 🔥使用Go从零开发一个编译器 (opens new window)
  • 🔥使用Go从零开发一个解释器 (opens new window)
Rust编程指南
  • SQL零基础指南
  • MySQL开发与调试指南
GitHub (opens new window)
首页
  • 🔥最新谷歌C++风格指南(含C++17/20)
  • 🔥C++17详解
  • 🔥C++20完全指南
  • 🔥C++23快速入门
🔥C++面试
  • 第1章 C++ 惯用法与Modern C++篇
  • 第2章 C++开发工具与调试进阶
  • 第3章 C++多线程编程从入门到进阶
  • 第4章 C++网络编程重难点解析
  • 第5章 网络通信故障排查常用命令
  • 第6章 网络通信协议设计
  • 第7章 高性能服务结构设计
  • 第8章 Redis网络通信模块源码分析
  • 第9章 服务其他模块设计
  • 🚀 全部章节.pdf 下载 (opens new window)
  • 🔥C++游戏编程入门(零基础学C++)
  • 🔥使用C++17从零开发一个调试器 (opens new window)
  • 🔥使用C++20从零构建一个完整的低延迟交易系统 (opens new window)
  • 🔥交易系统开发岗位求职与面试指南统 (opens new window)
  • 🔥使用C++从零写一个C语言编译器 (opens new window)
  • 🔥从零用C语言写一个Redis
  • leveldb源码分析
  • libevent源码分析
  • Memcached源码分析
  • TeamTalk源码分析
  • 优质源码分享 (opens new window)
  • 🔥远程控制软件gh0st源码分析
  • 🔥Windows 10系统编程
  • 🔥Linux 5.x内核开发与调试 完全指南 (opens new window)
  • TCP源码实现超详细注释版.pdf (opens new window)
  • Go系统接口编程
  • 高效Go并发编程
  • Go性能调优
  • Go项目架构设计
  • 🔥使用Go从零开发一个数据库
  • 🔥使用Go从零开发一个编译器 (opens new window)
  • 🔥使用Go从零开发一个解释器 (opens new window)
Rust编程指南
  • SQL零基础指南
  • MySQL开发与调试指南
GitHub (opens new window)
  • C++语言面试问题集锦 目录与说明
    • 第一章 auto与类型推导
    • 第二章 关键字static及其不同用法
    • 第三章 多态、继承和虚函数
    • 第四章 Lambda函数
    • 第五章 C++中如何使用 const 限定符
    • 第六章 Modern C++的一些最佳实践
    • 第七章 智能指针
    • 第八章 引用、万能引用等
    • 第九章 C++20相关问题
    • 第十章 特殊函数及数量规则
    • 第十一章 C++面向对象设计
    • 第十二章 程序质量
    • 第十三章 标准模板库
    • 第十四章 杂项
    • cppinterviewmostaskedquestions
    zhangxf
    2025-03-27
    目录

    C++语言面试问题集锦 目录与说明

    # C++语言面试问题集锦

    Page Views Count (opens new window)

    # 说明

    我学习和使用 C/C++ 开发快 13 年了,目前在大厂做架构,在学习 C/C++ 的过程中,我踩了一个又一个坑,深知新手学习 C/C++ 的重要性和存在的困难,面试通过和工作经验往往是一对先有鸡先有蛋的矛盾体。许多工作年限不长的 C/C++ 小伙伴在面试时被面试官的 C++ 语言题问得抓耳挠腮、怅然若失。特汇总常见的 C++ 面试语法题,分享出来,希望能助大家一臂之力。

    当然,C++的面试的内容不仅仅只考察 C++语言本身,更多的还考察算法数据结构、操作系统原理、计算机网络(含网络编程)、数据库、项目经验等,也就是说我们常说的五大基础,本专栏只涵盖 C++ 语言本身的面试题,五大基础我以视频的形式整理在《C/C++后端开发常见面试题解析 (opens new window)》(设置了一个小小的收费门槛,收费不是目的,仅仅是为了过滤一些无效杂音)。

    # 联系与交流

    因个人水平有限,如果你在学习的过程中遇到问题想与小方交流,可以加微信 cppxiaofang,找工作的同学可以加入小方的 C++求职与技术交流群。

    # 全套面试题下载

    如果你想下载这套C++面试题,请加小方微信 cppxiaofang 获取,备注“C++面试题”。

    # 目录

    • 第一章 auto与类型推导

      • 问题1:解释auto类型推导!
      • 问题2:auto在何时会推导出不理想的类型?
      • 问题3:使用auto有哪些优点?
      • 问题4:在以下声明后,myCollection的类型是什么?
      • 问题5:后置返回类型是什么?
      • 问题6:解释decltype!
      • 问题7:何时使用decltype(auto)?
      • 问题8:将两个bool类型相加,会得到什么数据类型?
    • 第二章 关键字static及其不同用法

      • 问题9:C++中静态成员变量是什么意思?
      • 问题10:C++中静态成员函数是什么意思?
      • 问题11:什么是静态初始化顺序混乱问题?
      • 问题12:如何解决静态初始化顺序混乱问题?
    • 第三章 多态、继承和虚函数

      • 问题13:函数重载(function overloading)和函数重写(function overriding)有什么区别?
      • 问题14:什么是虚函数?
      • 问题15:override关键字是什么,它有什么优点?
      • 问题16:解释协变返回类型(covariant return types)的概念,并举例说明其适用场景!
      • 问题17:C++中的虚继承(virtual inheritance)是什么,何时应该使用它?
      • 问题18:我们是否应该总是使用虚继承?如果是,为什么?如果不是,又为什么?
      • 问题19:以下简单程序的输出是什么?这是你预期的结果吗?为什么是或为什么不是?
      • 问题20:如果使用私有继承,能否访问基类的公有和受保护成员及函数?
      • 问题21:私有继承用于什么场景?
      • 问题22:能否在构造函数或析构函数中调用虚函数?
      • 问题23:虚析构函数有什么作用?
      • 问题24:我们可以从标准容器(如std::vector)继承吗?如果可以,会有什么影响?
      • 问题25:强类型(strong type)是什么意思,它有什么优点?
      • 问题26:解释短路求值(short - circuit evaluation)。
      • 问题27:什么是析构函数,如何重载析构函数?
      • 问题28:以下代码片段的输出是什么,为什么?
      • 问题29:如何在C++中使用= delete说明符?
    • 第四章Lambda函数

      • 问题30:什么是立即调用的Lambda函数?
      • 问题31:Lambda表达式有哪些可用的捕获方式?
    • 第五章 C++中const限定符的用法

      • 问题32:以下代码片段的输出是什么,为什么?
      • 问题33:使用const局部变量有哪些优点?
      • 问题34:在类中使用const成员是个好主意吗?
      • 问题35:按值返回const对象有意义吗?
      • 问题36:如何从函数中返回const指针?
      • 问题37:函数应该返回const引用吗?
      • 问题38:函数参数中,对于普通旧数据类型(plain old data types),是否应该通过const引用传递?
      • 问题39:函数参数中,是否应该通过const引用传递对象?
      • 问题40:函数声明的签名必须与函数定义的签名匹配吗?
      • 问题41:解释consteval和constinit为C++带来了什么?
    • 第六章 Modern C++的一些最佳实践

      • 问题42:什么是聚合初始化(aggregate initialization)?
      • 问题43:什么是显式构造函数(explicit constructors),它们有什么优点?
      • 问题44:什么是用户自定义字面量(user - defined literals)?
      • 问题45:为什么我们应该使用nullptr而不是NULL或0?
      • 问题46:别名(alias)相较于typedef有什么优点?
      • 问题47:作用域枚举(scoped enums)相较于非作用域枚举(unscoped enums)有什么优点?
      • 问题48:是否应该显式删除未使用/不支持的特殊函数,还是将它们声明为私有?
      • 问题49:如何在C++中使用= delete说明符?
      • 问题50:C++中的平凡类(trivial class)是什么?
    • 第七章 智能指针

      • 问题51:解释资源获取即初始化(Resource acquisition is initialization,RAII)惯用法。
      • 问题52:我们应该在何时使用unique指针?
      • 问题53:使用shared指针的原因有哪些?
      • 问题54:何时使用weak指针?
      • 问题55:相较于new运算符,std::make_shared和std::make_unique有哪些优点?
      • 问题56:是否应该始终使用智能指针而不是原始指针?
      • 问题57:何时以及为什么要将指针初始化为nullptr?
    • 第八章 引用、万能引用等

      • 问题58:std::move移动了什么?
      • 问题59:std::forward转发了什么?
      • 问题60:万能引用(universal references)和右值引用(rvalue references)有什么区别?
      • 问题61:什么是引用折叠(reference collapsing)?
      • 问题62:constexpr函数何时求值?
      • 问题63:何时应该将函数声明为noexcept?
    • 第九章 C++20相关问题

      • 问题64:C++中的概念(concepts)是什么?
      • 问题65:C++中有哪些可用的标准属性?
      • 问题66:三路比较(3 - way comparison)是什么?
      • 问题67:解释consteval和constinit为C++带来了什么?
      • 问题68:模块(modules)是什么,它们有什么优点?
    • 第十章 特殊函数及相关规则

      • 问题69:解释三法则(rule of three)。
      • 问题70:解释五法则(rule of five)。
      • 问题71:解释零法则(rule of zero)。
      • 问题72:std::move移动了什么?
      • 问题73:什么是析构函数,如何重载析构函数?
      • 问题74:是否应该显式删除未使用/不支持的特殊函数,还是将它们声明为私有?
      • 问题75:C++中的平凡类是什么?
      • 问题76:拥有默认构造函数有什么优点?
    • 第十一章 C++面向对象设计

      • 问题77:类(class)和结构体(struct)有什么区别?
      • 问题78:构造函数委托(constructor delegation)是什么?
      • 问题79:解释协变返回类型的概念,并举例说明其适用场景!
      • 问题80:函数重载和函数重写有什么区别?
      • 问题81:override关键字是什么,它有什么优点?
      • 问题82:解释什么是友元类(friend class)或友元函数(friend function)。
      • 问题83:默认参数(default arguments)是什么?在C++函数中它们是如何求值的?
      • 问题84:this指针是什么,我们可以删除它吗?
      • 问题85:C++中的虚继承是什么,何时应该使用它?
      • 问题86:我们是否应该总是使用虚继承?如果是,为什么?如果不是,又为什么?
      • 问题87:强类型是什么意思,它有什么优点?
      • 问题88:什么是用户自定义字面量?
      • 问题89:为什么我们不应该使用布尔参数?
      • 问题90:区分浅拷贝(shallow copy)和深拷贝(deep copy)。
      • 问题91:类函数是否会被计入对象大小?
      • 问题92:动态分派(dynamic dispatch)是什么意思?
      • 问题93:什么是虚函数表(vtable)和虚指针(vpointer)?
      • 问题94:基类析构函数应该是虚函数吗?
      • 问题95:C++中的抽象类(abstract class)是什么?
      • 问题96:是否可能实现具有多态行为但没有虚函数开销的类?
      • 问题97:如何使用奇特递归模板模式(Curiously Recurring Template Pattern,CRTP)为类添加功能?
      • 问题98:使用初始化函数初始化对象有哪些充分的理由?
    • 第十二章 程序质量

      • 问题99:代码的可观察行为(observable behaviour)是什么?
      • 问题100:一个错误构造的C++程序有哪些特征?
      • 问题101:未指定行为(unspecified behaviour)是什么?
      • 问题102:实现定义行为(implementation - defined behaviour)是什么?
      • 问题103:C++中的未定义行为(undefined behaviour)是什么?
      • 问题104:未定义行为存在的原因有哪些?
      • 问题105:应采取哪些方法避免未定义行为?
      • 问题106:什么是迭代器失效(iterator invalidation)?举几个例子。
    • 第十三章 标准模板库

      • 问题107:什么是STL?
      • 问题108:算法相较于原始循环有哪些优点?
      • 问题109:算法会验证范围吗?
      • 问题110:能否组合不同大小的容器?
      • 问题111:vector的内存布局是如何组织的?
      • 问题112:我们可以从标准容器(如std::vector)继承吗?如果可以,会有什么影响?
    • 第十四章 杂项

      • 问题117:能否在构造函数或析构函数中调用虚函数?
      • 问题118:默认参数是什么?在C++函数中它们是如何求值的?
      • 问题119:虚函数可以有默认参数吗?
      • 问题120:基类析构函数应该是虚函数吗?
      • 问题121:mutable关键字的作用是什么?
      • 问题122:volatile关键字的作用是什么?
      • 问题123:什么是内联函数(inline function)?
      • 问题124:我们捕获什么?
      • 问题125:引用和指针有什么区别?
      • 问题126:以下哪些变量声明可以编译,a的值会是什么?
      • 问题127:下面这行代码会输出什么,为什么?
      • 问题128:解释前置和后置递增/递减运算符的区别。
      • 问题129:a、b和c的最终值是什么?
      • 问题130:这个字符串声明能编译吗?
      • 问题131:C++中的默认成员初始化器(Default Member Initializers)是什么?
      • 问题132:什么是最令人困惑的解析(the most vexing parse)?
      • 问题133:这段代码能编译吗?如果能,它会做什么?如果不能,为什么?
      • 问题134:什么是std::string_view,为什么我们应该使用它?
      • 问题135:如何检查一个字符串是否以某个子字符串开头或结尾?
      • 问题136:什么是返回值优化(RVO)?
      • 问题137:如何确保编译器执行返回值优化?
      • 问题138:C++中的主要和混合值类别是什么?
      • 问题139:可以安全地比较有符号和无符号整数吗?
      • 问题140:main函数的返回值是什么,有哪些可用的签名?
      • 问题141:你应该更喜欢默认参数还是函数重载?
      • 问题142:一行中应该声明多少个变量?
      • 问题143:你应该更喜欢switch语句还是链式if语句?
      • 问题144:什么是包含保护(include guards)?
      • 问题145:包含文件时,应该使用尖括号(<filename>)还是双引号("filename")?
      • 问题146:一个函数中应该有多少个返回语句?
    上次更新: 2025/04/01, 13:21:34
    第一章 auto与类型推导

    第一章 auto与类型推导→

    最近更新
    01
    第一章 auto与类型推导
    03-27
    02
    第二章 关键字static及其不同用法
    03-27
    03
    第四章 Lambda函数
    03-27
    更多文章>
    Copyright © 2024-2025 沪ICP备2023015129号 张小方 版权所有
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式