据我了解, constexpr 可以被视为对编译器的提示,以检查是否可以在编译时评估给定的表达式,并在可能的情况下这样做。
我知道它还对声明为 constexpr 的函数或初始化施加了一些限制,但最终目标是编译时评估,不是吗?
所以我的问题是,为什么我们不能把它留给编译器呢?它显然能够检查前置条件,那么为什么它不对每个表达式执行并尽可能在编译时进行评估呢?
关于为什么会出现这种情况,我有两个想法,但我还不相信他们能做到这一点:
a) 在编译期间可能需要很长时间。
b)由于我的代码可以在不允许使用 normale 函数的位置使用 constexpr 函数,因此说明符也是声明的一部分。如果编译器自己完成所有操作,则可以在 C 数组定义中使用具有该函数的一个版本的函数,但在下一个版本中可能会出现编译器错误,因为编译时评估的先决条件是不更满意。