Skip to content

模板与模板元编程(Template & Metaprogramming)专题

HPC/Infra 面试偏重「模板能力」:类型萃取、编译期计算、SFINAE、CRTP、concepts、推导规则。这是区分「会用模板」和「懂元编程」的分水岭,常作为硬核区。

问题清单

  1. 函数模板 / 类模板 / 模板特化 / 偏特化 区别?
  2. 模板的「编译期实例化」是什么?为什么模板放头文件?
  3. 什么是类型萃取 type_traitsremove_reference/is_same 原理?
  4. SFINAE 原理与「enable_if」?
  5. constexpr 元编程(编译期计算 / 递归 / C++14+ 泛化)?
  6. CRTP 与静态多态(对比虚函数)?
  7. 折叠表达式 fold (C++17)?
  8. concepts(C++20) 如何替代 SFINAE 报错信息差?
  9. 模板推导规则若干倒错题(引用折叠 / auto / 完美转发)?
  10. std::is_same_v + if constexpr(C++17)在函数里剪枝。

子文档

文件内容
index.md本总览
basics.md模板基础、实例化、特化/偏特化、非类型参数
type-traits.mdtype_traits 原理、remove_、is_、conditional、tuple 实现模型
sfinae.mdSFINAE、enable_if、void_t 探测惯用法
constexpr-meta.mdconstexpr 函数 C++14、编译期递归、if constexpr 剪枝
crtp.mdCRTP / 静态多态 / 混入(mixin)
concepts.mdC++20 requires/concept 语法与 use-case
deduction.md模板参数推导深规则(引用折叠、auto 对应)+ 经典题

学习顺序建议

basicssfinae/type-traits(工具)→ constexpr-meta(计算)→ crtp(模式)→ concepts(新写法)。每篇末尾有自测/推导题,盖住答案先自己做。

提示:HPC/AI infra 里真正的「元编程」大量用于编译期维度展开、生成访问代码、policy-based 设计、kernel 分派,而不是面试背 SFINAE 诅咒——理解「为什么需要」(编译期选型/性能/诊断)比炫技更重要。

C++ 面试八股 · VitePress 版