gpt4 book ai didi

堆栈上的 C++ 可变长度数组

转载 作者:搜寻专家 更新时间:2023-10-31 00:35:37 25 4
gpt4 key购买 nike

刚在项目中遇到代码dcraw这导致 Visual Studio 2012 编译器失败。它的形式如下:

void CLASS cubic_spline (const int *x_, const int *y_, const int len)
{
float A[2*len][2*len], b[2*len], c[2*len], d[2*len];
...

问题是在堆栈上创建这些可变长度数组。我从未真正见过这样的代码 - 是否可以在 Visual Studio 编译器中编译它?

最佳答案

有一些可用的编译器扩展(例如 Clang's oneGCC's one )允许这样做,但它还不是标准的。

在 C++11 中你也可以使用 constexpr如果数值是常数。最后 a proposal已提交标准化。

如果x_y_ 是数组,你可以只使用std::array如下:

template<std::size_t size>
void CLASS cubic_spline (std::array<int, size> const& x, std::array<int, size> const& y)
{
using float_array = std::array<float, 2 * size>;
std::array<float_array, 2 * size> A;
float_array b, c, d;
// ...
}

这样您可以确保在编译时传递的数组维度相等。

否则你可以用 std::vector 清理它:

void CLASS cubic_spline (std::vector<int> const& x, std::vector<int> const& y)
{
std::vector<std::vector<float>> A(2 * x.size());
std::vector<float> b, c, d;
// ...
}

关于堆栈上的 C++ 可变长度数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23569150/

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