C++移动语义与完美转发50问
📚 共计 50 章节
01
什么是左值和右值?为什么C++11要引入右值引用?
左值 vs 右值,右值引用的动机
基础
右值引用
02
左值引用和右值引用的区别?如何声明右值引用?
语法与语义差异
引用
声明
03
什么是移动语义?它解决了什么问题?
资源窃取与性能提升
核心概念
04
移动构造函数和移动赋值运算符如何编写?
典型实现与注意事项
实现
移动构造
05
什么时候会触发移动构造?什么时候会触发拷贝构造?
隐式移动与拷贝选择
规则
06
std::move的作用是什么?它真的移动了数据吗?
类型转换而非移动
std::move
07
为什么说std::move只是一个类型转换?实现原理?
static_cast到右值引用
原理
08
什么是完美转发?它解决了什么痛点?
保持值类别
完美转发
09
std::forward的作用?与std::move的区别?
条件转换 vs 强制右值
std::forward
10
引用折叠(Reference Collapsing)的规则是什么?
T& & -> T& 等规则
模板
折叠
11
万能引用(Universal Reference)?与右值引用区别?
T&& 上下文相关
万能引用
12
模板参数推导中,T&&何时是左值/右值引用?
推导规则与引用折叠
推导
13
如何实现一个支持移动语义的自定义字符串类?
深拷贝 vs 移动
实践
14
移动语义对std::vector等容器性能的影响?
realloc优化
容器
15
为什么push_back需要左值和右值两个版本?
重载决议
API
16
emplace_back和push_back区别?为何emplace更高效?
直接构造 vs 移动构造
emplace
17
什么是异常安全的移动操作?如何保证不抛异常?
noexcept与资源安全
异常
18
noexcept关键字在移动语义中的角色?
优化与容器重分配
noexcept
19
为什么移动构造/赋值通常标记为noexcept?
容器强异常保证
最佳实践
20
如何编写既支持拷贝又支持移动的类?
Rule of Five
设计
21
什么是Rule of Five?与Rule of Three关系?
特殊成员函数
规则
22
什么情况下编译器会隐式删除移动构造函数?
条件与抑制
隐式
23
如何禁用拷贝但允许移动?禁用移动但允许拷贝?
=delete 与显式
控制
24
移动语义在多线程编程中的应用场景?
转移所有权
并发
25
如何通过移动语义避免深拷贝的性能开销?
大对象传递
优化
26
返回值移动优化(RVO/NRVO)?与std::move关系?
编译器优化
RVO
27
为什么返回局部变量时不应显式使用std::move?
阻止RVO
反模式
28
完美转发在工厂模式中如何应用?
参数转发
工厂
29
如何实现通用的make_unique(类似std::make_unique)?
可变参数+完美转发
实现
30
可变参数模板与完美转发如何配合?
参数包展开
模板
31
什么是SFINAE?如何与完美转发结合?
替换失败非错误
SFINAE
32
如何使用std::enable_if约束转发行为?
类型约束
enable_if
33
什么是折叠表达式?在完美转发中的用途?
C++17 折叠
折叠表达式
34
实现支持任意参数转发的委托/回调系统
完美转发+std::function
委托
35
移动语义对智能指针(如unique_ptr)设计的影响?
独占所有权
智能指针
36
为什么std::unique_ptr只能移动不能拷贝?
所有权语义
unique_ptr
37
如何将移动语义应用于自定义RAII类?
资源管理
RAII
38
容器中存储可移动对象需要注意哪些问题?
异常安全与noexcept
容器
39
什么是移动迭代器(std::move_iterator)?如何使用?
将拷贝转为移动
迭代器
40
通过移动语义优化大型对象的函数参数传递
传值 vs 引用
参数传递
41
值传递、左值引用、右值引用传递如何选择?
现代C++最佳实践
指南
42
隐式移动?C++11/14/17/20中规则变化
隐式移动的演进
标准
43
如何检测一个类型是否支持移动构造?
type traits
检测
44
移动语义在异步编程(future/promise)中的应用
异步传输
异步
45
如何实现一个移动感知的线程池?
任务移动
线程池
46
完美转发在访问者/策略模式中的优势
灵活的参数转发
设计模式
47
什么是泛型lambda?与完美转发如何结合?
auto&& 参数
lambda
48
编写支持完美转发的包装器(Wrapper)类
转发构造函数
包装器
49
移动语义与异常处理:构造函数抛出异常时资源安全
异常安全移动
异常
50
综合实战:轻量级JSON解析器核心类(移动+完美转发)
设计一个现代C++ JSON 值类
实战
JSON