在 C++98 时代,编译期计算几乎等同于模板元编程(TMP)——用递归模板 + 特化在类型系统里模拟图灵完备的计算。代码晦涩,编译慢,出错信息堪称灾难。C++11 引入了 constexpr,承诺让"正常 C++ 代码"在编译期运行。此后每一个标准版本都在放宽它的能力边界,到 C++20/23,你几乎可以在编译期做任何事。
本文梳理 constexpr 从 C++11 到 C++23 的演进历程,重点解释 if constexpr、consteval、constinit 三个极易混淆的概念,以及编译期容器的内存模型。
2026/5/6大约 5 分钟