是否';D';语言支持';C';像弗拉?

是否';D';语言支持';C';像弗拉?,d,D,“D”语言是否支持本地分配的类似于“C”的可变长度数组 大概是这样的: void main() { size_t szArr = 3; int[szArr] arr; } 不,不是这样的运行时变量。您需要使用另一种方法: alloca可以分配运行时大小的堆栈空间,就像在C中一样,然后对其进行切片 int[] a = (cast(int*) alloca(size * int.sizeof))[0 .. size]; 由于alloca的工作方式,无法抽象为函数。不过你可

“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);
    
    int[1024]缓冲区;
    
    int[]runtimeSized=大小正确答案。对于从alloca获得的切片,使用
    scope
    属性检查切片是否未返回可能是合理的。目前的phobos库还有一个
    std.experimental.algorithm.showcase:StackFront
    分配器,据我所知,它可以使用
    makeArray
    为您创建数组。