constexpr 是 C++ 编译期计算的核心机制。从 C++11 的起步到 C++20 的全面支持,constexpr 的能力不断扩展,让越来越多的代码可以在编译期执行。

constexpr 的演进

// C++20: 编译期分配内存
constexpr auto createArray(int n) {
    auto v = std::vector<int>{};
    for (int i = 0; i < n; ++i)
        v.push_back(i * i);
    return v;
}
constexpr auto squares = createArray(10); // 编译期计算

consteval 与 constinit

C++20 引入了两个新的编译期关键字:

编译期编程的威力

将计算从运行时移到编译期有三大好处:零运行时开销、更早的错误发现、更小的二进制体积。配合模板元编程,constexpr 可以在编译期生成高度优化的代码。

越多的代码在编译期执行,越少的 bug 在运行时出现。