gpt4 book ai didi

'D'语言是否支持VLA之类的 'C'?

转载 作者:行者123 更新时间:2023-12-05 02:22:21 26 4
gpt4 key购买 nike

“D”语言是否支持本地分配的“C”,如可变长度数组?

像这样:

void main()
{
size_t szArr = 3;

int[szArr] arr;
}

最佳答案

不,不是这样的运行时变量。您需要使用替代方案:

  • alloca 可以分配运行时大小的堆栈空间,就像在 C 中一样,然后将其切片。

    int[] a = (cast(int*) alloca(size * int.sizeof))[0 .. size];

由于 alloca 的工作方式,它不能被抽象成一个函数。不过,您可以将其设为混合字符串。

  • 您可以使用静态数组,如其他答案中所述,然后将其切片为一定大小。像这样的东西:

    int[1024] buffer;
    int[] runtimeSized = size <= buffer.length ? buffer[0 .. size] : (new int[](size);

由于缓冲区的大小是静态的,如果可以的话,你可以对其进行切片,如果不能则创建一个常规数组(或者你可以抛出某种“数据太大”的异常)。

如果愿意,您可以将其抽象为一个漂亮的小结构以便于使用。

请记住,在函数返回后存储对堆栈数据的引用是无效的,但编译器不会帮助指出您在哪里做了它。

关于 'D'语言是否支持VLA之类的 'C'?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29610673/

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