C++函数式编程([塞尔维亚]伊凡·库奇)

书: https://pan.baidu.com/s/15VfTw9eJ2MoiHktwswP0gw?pwd=tq5x
笔记如下:

一、函数式基础

  1. “函数式编程(FP)的核心原则:纯函数(无副作用)不可变数据声明式表达。”
  2. “C++中实现纯函数:避免修改全局变量或参数,const修饰返回值与成员方法。”

二、高阶函数与Lambda

  1. “高阶函数(Higher-Order Functions)是FP的灵魂:函数作为参数或返回值,如std::transform。”
  2. “Lambda表达式[](){}的本质是匿名函数对象,捕获列表([=]/[&])决定闭包行为。”

三、不可变性与值语义

  1. constexpr编译时计算实现不可变(Immutable)数据结构,避免运行时修改。”
  2. “值语义(Value Semantics)优于引用语义:std::vector副本独立,而非像Java引用共享。”

四、模板元编程与FP

  1. “模板元编程(TMP)是编译时FP:template<typename F>支持泛型高阶函数。”
  2. std::function统一可调用对象(函数指针、Lambda、bind结果),类型擦除代价是性能损失。”

五、STL函数式支持

  1. “STL算法中的FP思想:std::accumulate对应foldstd::bind实现部分应用(Partial Application)。”
  2. “范围库(Ranges, C++20)的管道操作符|启用链式调用,如views::filter(f) | views::transform(g)。”

六、Monad与错误处理

  1. std::optional模拟Maybe Monad:显式处理空值,避免nullptr陷阱。”
  2. std::expected(C++23)扩展optional,携带错误信息(类似Rust的Result)。”

七、并发与FP

  1. “不可变数据天然线程安全:无锁(Lock-free)并发只需关注任务调度。”
  2. std::async + Lambda实现并行map,但需警惕数据竞争(共享状态需同步)。”

八、性能与优化

  1. “尾递归优化(Tail Recursion)在C++中依赖编译器实现,[[clang::musttail]]可强制要求。”
  2. “表达式模板(Expression Templates)延迟计算,避免临时对象开销(如Eigen库矩阵运算)。”

九、设计模式

  1. “策略模式(Strategy)用std::function替代虚函数,运行时替换算法。”
  2. “观察者模式(Observer)借助Lambda简化回调注册,如subject.on_event([](){...})。”

十、混合范式建议

  1. “C++是多范式语言:OOP封装状态 + FP处理逻辑,二者互补而非对立。”
  2. “FP的终极目标:代码如数学公式般简洁可证,但需平衡性能与抽象成本。”

发表评论

您的电子邮箱地址不会被公开。 必填项已用 * 标注