gpt4 book ai didi

d - 在 D 中创建编译时未知的静态数组

转载 作者:行者123 更新时间:2023-12-02 08:37:17 25 4
gpt4 key购买 nike

如何在 D 中创建一个在编译时未指定大小的静态数组?

immutable ulong arrayLength = getArrayLength();
ubyte[arayLength]; // <- How to do this basically

最佳答案

简短回答:您不知道。静态数组的大小在编译时总是已知的。如果您想要一个大小在运行时确定的数组,那么它需要是一个动态数组。

更长的答案:如果您想自己编写一些东西,您可以使用 C 的 alloca ,可以在 core.stdc.stdlib 中找到。但我不建议搞乱那种事情,除非你真的需要。

另一种方法是使用一个静态数组,如果您想要的大小不大于该数组,如果它最终变大,则分配一个动态数组。如果你愿意,你甚至可以创建包装器类型来处理它。这是一个简单的

struct StaticArray(T, size_t defaultLen = 10)
{
public:

this(size_t length)
{
if(length <= _staticArr.length)
_arr = _staticArr[0 .. length];
else
_arr = new T[](length);
}

inout(T)[] opSlice() inout pure nothrow
{
return _arr;
}

inout(T)[] opSlice(size_t i, size_t j) inout pure nothrow
{
return _arr[i .. j];
}

inout(T) opIndex(size_t i) inout pure nothrow
{
return _arr[i];
}

@property size_t length() @safe const pure nothrow
{
return _arr.length;
}

private:

T[defaultLen] _staticArr;
T[] _arr;
}

我确信这可以改进,但它提供了一种方法的示例,当您事先不知道数组需要多少元素时,可以尝试避免动态分配数组。

拥有在运行时确定长度的静态数组的主题最近是 discussed in the D newsgroup ,以及该语言的创建者 Walter Bright,认为它们带来的麻烦多于它们的值(value),所以我不希望在 D 中看到这样的功能(尽管我们可能会在标准库中获得某种包装类型它做的事情类似于我在这里的例子)。

关于d - 在 D 中创建编译时未知的静态数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20154048/

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