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

时间:2017-01-20 23:32:00

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

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

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

为什么呢?这可以改写,以便编译吗?

1 个答案:

答案 0 :(得分:0)

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

我不知道有一种可移植的方法可以使其与constexpr一起使用,但GCC的__builtin_log适用于constexpr上下文(godbolt):

constexpr double lnFactor = __builtin_log(42.0);