如何将 constexpr 作为函数参数传递 c++

How to pass a constexpr as a function parameter c++

我有一个简单的函数,它用双精度值和 returns 数组填充一个数组:

double create_step_vectors(int n_steps, double step_size)
{
    std::array<double, n_steps + 1> vec{};
    for (int i = 0; i <= n_steps; i++)
    {
        arr[i] = i * step_size;
    }
    return arr
}

我传入 n_steps,它在主作用域中定义为:

    constexpr int n_step {static_cast<int>(1 / x_step) };

我收到错误:

    error: 'n_steps' is not a constant expression
   13 |     std::array<double, n_steps + 1> vec{};

我曾尝试将 n_steps + 1 放在花括号中,但没有用。 n_steps这里出现错误的目的是设置数组的大小,arr.

我该如何解决这个问题?

你不能在需要编译表达式的地方使用函数参数,因为参数不是 constexpr,即使在 constexpr 函数中(你的 constexpr 函数也可以被调用具有非 constexpr 值)。

对于您的情况,最简单的解决方案可能是使用非类型模板参数:

template <int n_steps>
auto create_step_vectors(double step_size)
{
    std::array<double, n_steps + 1> arr;
    for (int i = 0; i <= n_steps; i++)
    {
        arr[i] = i * step_size;
    }
    return arr;
}

然后

constexpr int n_step{ static_cast<int>(1 / x_step) };
const auto arr = create_step_vectors<n_step>(1.);