提问者:小点点

C++20中的constexpr数学函数[重复]


我想做的是:

#include <cmath>

template <unsigned A, unsigned B>
struct fu {
    constexpr unsigned long power_A_of_B = std::pow(A, B);
};

但是编译器给出错误,因为pow()不是constexpr

为什么标题中的数学函数不是constexpr? 例如,log()log2()pow()abs()fmax()不是constexpr,但中的其他代码是,例如max()min()和`clamp()'。


共1个答案

匿名用户

为什么header中的数学函数不是ConstExpr?

原因隐藏在std::pow的文档中:

std::pow,std::powf,std::powl-cpreference.com

错误按Math_ErrHandling中指定的方式报告。

请参阅math_errhandling的文档。

那么如何在constexpr中处理此宏呢?

所以整个问题是保持与旧规范的兼容性。

唯一可能的解决方案是使用替代实现。 我发现了这样的东西,没有测试过,但看起来很有希望。 在这里发现的。

相关问题


MySQL Query : SELECT * FROM v9_ask_question WHERE 1=1 AND question regexp '(c++20|中|constexpr|数学|函数|重复)' ORDER BY qid DESC LIMIT 20
MySQL Error : Got error 'repetition-operator operand invalid' from regexp
MySQL Errno : 1139
Message : Got error 'repetition-operator operand invalid' from regexp
Need Help?