我最近就想知道这个问题。gcc 等编译器如何在编译时实现 constexpr 函数调用的求值?
最方便的方法似乎是使用函数的编译机器代码或更可能是一些编译中间代码并执行它,但这有一些问题。在 2020 年,constexpr 函数中允许标准动态分配。如果 constexpr 函数有一些错误编写的内存管理代码并尝试双重释放指针怎么办?如果编译器在这种情况下不崩溃就更好了。如果它破坏堆栈并覆盖编译器进程中其他地方的数据怎么办?同样,如果编译器不崩溃就更好了。编译器是否在沙箱环境中执行它?它如何检测此类内存错误?如果发生这样的内存错误怎么办?编译器是否会以其他方式模拟该函数?谢谢。
基本上,他们通过使用特殊的 constexpr 解释器来评估 constexpr。
在这里您可以阅读/观看 clang 实现
对于一个简单的答案来说太多了......