c++ - 为什么 constexpr 的标准库函数不是常量?

标签 c++ c++11 visual-c++ c++14

<分区>

constexpr PixelType maxVal = std::numeric_limits<PixelType>::max();
constexpr double lnFactor = std::log(maxVal);

第二行给出错误 C2131:表达式未计算为常量

为什么?可以改写它以便编译吗?

最佳答案

编译错误的原因是std::log不是constexpr

我不知道有一种可移植的方式让它与 constexpr 一起工作,但是 GCC 有 __builtin_log 可以在 constexpr 上下文中工作(godbolt ):

constexpr double lnFactor = __builtin_log(42.0);

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

相关文章:

c++ - 依赖的非类型模板参数

c++ - 分段后如何创建掩码来选择分段类?

c++ - C++11 是否允许 vector<const T>?

c++ - 为什么...(三点)在 catch block 中存在?

visual-c++ - 在禁用优化的情况下发布时链接缓慢

c++ - 从路径中获取文件名

c++ - 用 C++ 编程的 DAW 使用什么来进行图形渲染和音频输出?

c++ - 是否可以像这样编写c malloc函数代码

c++ - 重用 std::fstream

c++ - 为什么四个大于 63000 个元素的局部数组会导致堆栈溢出?