如何将 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.);
我有一个简单的函数,它用双精度值和 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.);