gpt4 book ai didi

c++ - 从 constexpr 构造 const 数组

转载 作者:搜寻专家 更新时间:2023-10-31 02:17:06 24 4
gpt4 key购买 nike

为了论证,假设我在一个类中有以下私有(private) constexpr:

static constexpr uint16_t square_it(uint16_t x)
{
return std::pow(x, 2);
}

然后我想使用上面的 constexpr 在同一类的同一部分中为最多 255 的整数构造这些值的静态常量数组:

static const uint16_t array_of_squares[256] =
{
//something
};

我希望数组在编译时构建,而不是在运行时构建(如果可能的话)。我认为第一个问题是在 constexpr 中使用像 std::pow 这样的表达式不是有效的 ISO C++(虽然 arm-gcc 可能允许?),因为它可以返回域错误。我想使用的实际表达式是一个涉及 std::exp 的有点复杂的函数。

请注意,我在为小型微处理器 Cortex M4 进行编译时没有太多可用的标准库。

是否有更合适的方法来做到这一点,比如使用预处理器宏?我非常希望避免每次在开发过程中需要修改表格时使用外部 Python 脚本之类的东西来计算表格,然后将其粘贴进去。

最佳答案

正如您所说,问题是 C 标准库函数通常没有标记为 constexpr

如果您需要使用 std::exp,最好的解决方法是编写您自己的可以在编译时运行的实现。如果它打算在编译时完成,那么可能没有必要对其进行优化,它只需要准确且适度有效即可。

有人问了一个关于如何做到这一点的问题here很久以前。您可以重用那里的想法并在 C++11 中重写为 constexpr 函数,尽管您必须重构它以避免 for 循环。在 C++14 中,需要更少的重构。

你也可以尝试严格地通过模板来做,但这会更痛苦,而且 double 不能是模板参数所以它会更复杂。

关于c++ - 从 constexpr 构造 const 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36117906/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com