为什么标准库常见的数学函数不是"常量表达式"?

Nei*_*l G 11 cmath constexpr c++11

出于某种原因,clang ++(但不是g ++)抱怨:

constexpr double invdecayf1m(double x) {
  return -log1p(-x);
}
Run Code Online (Sandbox Code Playgroud)

告诉我

non-constexpr function 'log1p' cannot be used in a constant expression
  return -log1p(-x);
Run Code Online (Sandbox Code Playgroud)

为什么在所有声明的常用数学函数<cmath>都不是" constexpr函数"

Jan*_*ann 2

我认为唯一的原因是没有人写一个提案来使它们成为 constexpr。一般来说这是可能的,因为它们是纯函数。实现可以使用编译器内在函数来为它们的库实现它们,因此不需要“真正的”实现。但如果没有建议,您就不能指望constexpr这些功能的实现。