我最近在考虑这个问题。像gcc这样的编译器如何在编译时评估constexpr函数调用?
最方便的方式似乎是使用函数的编译后机器码或更可能的是一些编译后的中间代码并执行它,但这有一些问题。在2020标准中允许在constexpr函数中进行动态分配。如果一个constexpr函数有一些错误编写的内存管理代码,比如试图double-free一个指针怎么办?如果编译器在这种情况下崩溃会更好。如果它破坏堆栈并在编译器进程的其他位置覆盖数据呢?同样地,如果编译器不崩溃会更好。编译器是否在沙箱环境中执行它?它如何检测这样的内存错误?如果发生这样的内存错误,它会怎么做?编译器是否以其他方式模拟函数?谢谢。