D 是否区分 return/argument 类型的动态数组和静态数组?

Does D distinguish between return/argument types of dynamic vs. static arrays?

假设我定义了一个函数 mutate,它应用了一些函数

来替换 int 数组 a 的随机索引内容
int[] mutate(int[] a) {
    int randomIndex = cast(int) uniform(a[randomIndex]);
    a[randomIndex] = a[randomIndex] + 1;
    return a;
}

此函数是否指定动态 int 数组、静态 int 数组或两者的输入和 return 值? 也就是说,此函数是否仅限于接受和 returning 数组的任一子类型?有没有办法区分动态数组和静态数组作为函数的参数?

以下任一操作是否会引发错误?

void main() {
    int[] dyn;
    dyn = [1, 2, 3];
    writeln(mutate(dyn));

    int[3] stat = [1,2,3];
    writeln(mutate(stat));
}
int[] mutate(int[] a)

那需要一片,returns 一片。切片不一定是动态数组,它可能是静态数组,但您需要将其作为 stat[] 而不是仅 stat.

传递

切片就像 C 语言中的 ptrlength 组合:指向数据的指针(可以位于任何位置、动态数组、malloc 数组、静态数组、一些块内存,无论什么)和长度计数。

当你 return 那样的时候,你确实需要小心不要存储它。切片不知道它存储在哪里,您可能很容易忘记谁拥有它并最终使用错误的指针!所以在做这样的事情时要确保范围是安全的。

阅读此内容了解更多信息:

http://dlang.org/d-array-article.html