c++ - 为什么标准库常用数学函数不是 "constant expressions"?

标签 c++ c++11 constexpr cmath

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

constexpr double invdecayf1m(double x) {
  return -log1p(-x);
}

告诉我
non-constexpr function 'log1p' cannot be used in a constant expression
  return -log1p(-x);

为什么不是 common mathematical functions声明于 <cmath>全部声明为 constexpr functions” ?

最佳答案

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

关于c++ - 为什么标准库常用数学函数不是 "constant expressions"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21303498/

相关文章:

c++ - 如何在不使用 C++11 线程的情况下使用仿函数作为线程函数在 Windows 中开始线程?

c++ - Windows 上没有 GLUT 的 OpenGL 4.5 简单教程

c++ - 类型转换 std::placeholder

c++ - 编译器何时应该生成 move 构造函数?

c++ - 编译器是否被迫拒绝无效的 constexpr?

c++ - 在命名空间中使用 constexpr double

c++ - 是否使用静态 constexpr odr?

c++ - 在 C++ 中插入映射

c++ - 使用 Libcurl 从 FTP 服务器文件下载多个文件

c++ - boost::geometry::model::linestring 与 boost::geometry::model::polygon 的交集