卡码笔记-最强八股文
首页
计算机基础
C++
Java
Go
🔥大模型🔥
  • 大模型面经
  • Java面经
  • C++面经
简历专栏
代码随想录 (opens new window)
首页
计算机基础
C++
Java
Go
🔥大模型🔥
  • 大模型面经
  • Java面经
  • C++面经
简历专栏
代码随想录 (opens new window)
  • 本栏必读

    • 关于本专栏
    • C++学习路线
    • C++面试题系优化
  • 基础与语法

  • 面向对象

  • STL 与容器

  • 内存管理

  • C++11 与现代 C++

    • C++11中的新特性有哪些
      • 简要回答
      • 详细回答
      • 知识拓展
    • C++11中的多线程编程
    • 左值引用和右值引用的区别
    • 移动语义有什么作用,原理是什么
    • 完美转发的作用及实现
    • 说一下c++中stdmove与stdforward的区别
    • 说一下lambda函数
    • 仿函数与lambda性能对比
    • C++中的RAII机制
    • C++中的异常处理机制
    • C++中的协程概念及实现
  • 智能指针

  • 并发与 I/O

# C++11 新特性全景

面试官问:"C++11 有哪些重要的新特性?你觉得最核心的改进是什么?"

这题看似简单,实际上考的是你对 C++11 的理解深度。很多人能列出十几个特性名字,但说不清这些特性之间的关系、为什么要引入、解决了什么问题。关键是从设计动机出发,把零散的特性串成体系。

# 简要回答

C++11 是现代 C++ 的分水岭,所有新特性围绕三个核心目标展开:

  • 性能优化:右值引用、移动语义、constexpr——减少不必要的拷贝,把能在编译期做的事提前做
  • 安全性提升:智能指针、nullptr、强类型枚举、static_assert——从语言层面堵住 C++ 的经典坑
  • 表达力增强:auto、Lambda、范围 for、初始化列表、变参模板——让代码更简洁、意图更明确

# 详细回答

性能优化:右值引用与移动语义

C++11 之前,函数返回大对象、容器插入临时对象,都要经历一次深拷贝。右值引用(T&&)让编译器能识别"即将销毁的临时对象",直接"偷走"它的资源而不是复制一份。配合 std::move,程序员可以显式触发移动而非拷贝。

constexpr 则是另一个方向的优化——把能在编译期算出来的值提前算好,运行时零开销。

安全性提升:智能指针与类型安全

unique_ptr、shared_ptr、weak_ptr 三种智能指针用 RAII 管理堆内存,从根本上解决忘记 delete、重复 delete、悬空指针三大问题。nullptr 替代了类型不安全的 NULL(本质是整数 0)。enum class 解决了传统枚举的命名污染和隐式转换问题。static_assert 让错误在编译期就暴露。

表达力增强:auto 与 Lambda

auto 让编译器推导类型,省去写复杂迭代器类型的痛苦。decltype 则用于获取表达式的精确类型,常用于模板编程。Lambda 表达式让"就地定义一个小函数"成为可能,配合 STL 算法使用极其方便。范围 for 循环简化了容器遍历。初始化列表 {} 统一了各种初始化语法。变参模板让泛型编程能处理任意数量的参数。

并发支持:多线程库

C++11 之前,多线程只能依赖平台 API(pthread、Windows API)。C++11 引入了 std::thread、std::mutex、std::condition_variable、std::atomic 等标准组件,让并发代码可以跨平台。

C++11 新特性体系

# 知识拓展

面试官可能追问:

Q1: auto 和 decltype 有什么区别?

auto 用于变量声明,让编译器从初始化表达式推导类型,会忽略顶层 const 和引用。decltype 用于获取表达式的精确类型,保留 const 和引用。典型场景:auto 简化日常代码,decltype 用在模板返回值推导等需要精确类型的地方。

Q2: 右值引用为什么能提升性能?

因为它让编译器区分"还要继续用的对象"和"马上就要销毁的临时对象"。对临时对象,移动构造函数直接接管它的内部资源(比如把 vector 内部的指针偷过来),而不是分配新内存再逐元素拷贝。代价从 O(n) 降到 O(1)。

Q3: unique_ptr、shared_ptr、weak_ptr 怎么选?

独占所有权用 unique_ptr,零额外开销,是默认选择。需要共享所有权时用 shared_ptr,有引用计数的开销。weak_ptr 配合 shared_ptr 使用,解决循环引用问题——它观察但不拥有对象。

Q4: Lambda 的捕获列表有什么讲究?

[=] 按值捕获所有外部变量,[&] 按引用捕获。按值捕获安全但有拷贝开销,按引用捕获零开销但要注意生命周期——如果 Lambda 比被捕获的变量活得久,引用就悬空了。实践中推荐显式列出要捕获的变量,意图更清晰。

Last Updated: 5/23/2026, 4:43:26 PM

← 如何避免内存碎片 C++11中的多线程编程 →

评论

验证登录状态...

侧边栏 侧边栏
夜间模式 夜间
卡码简历 卡码简历
代码随想录 代码随想录
卡码投递表 卡码投递表🔥
2026实习校招群 2026群
添加客服微信 2026实习校招客服微信 PS:通过微信后,请发送姓名-学校-年级-2026实习/校招
支持卡码笔记 支持卡码笔记
鼓励/支持/赞赏Carl 卡码笔记赞赏码
1. 如果感觉本站对你很有帮助,也可以请Carl喝杯奶茶,金额大小不重要,心意已经收下
2. 希望大家都能梦想成真,有好的前程,加油💪