'D'语言是否像VLA一样支持'C'?

时间:2015-04-13 16:45:36

标签: d

' D'语言支持本地分配的' C'像变长数组?

这样的事情:

void main()
{
    size_t szArr = 3;

    int[szArr] arr;
}

1 个答案:

答案 0 :(得分:3)

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

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

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

由于alloca的工作原理,不能被抽象为函数。你可以把它变成一个mixin字符串。

  • 你可以使用静态数组,就像在另一个答案中所说的那样,然后将其切成一个大小。类似的东西:

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

由于缓冲区是静态大小的,如果可以,你可以将其切片,如果没有,则进行常规数组(或者你可以抛出&#34;数据太大&#34;某种异常)。

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

请记住,在函数返回后存储对堆栈数据的引用是无效的,但是编译器在指出你执行它的位置时没有多大帮助。

相关问题