D关联数组 - 按值传递或通过引用传递?

时间:2014-08-07 04:24:41

标签: pass-by-reference d associative-array pass-by-value

假设我有一个指向字符串结构的指针的关联数组,其中结构被称为Foo;类型将是Foo*[string]。假设我还有一个带有以下签名的函数:void bar (Foo*[string] baz)baz会通过值或引用传递给bar吗?我没有找到任何关于此的文档,我很好奇。

4 个答案:

答案 0 :(得分:8)

通过引用 - 将在函数外部观察对现有AA的任何修改。

但是,当关联数组为null时,存在一个极端情况。在这种情况下,通过添加第一个元素来初始化AA将不会在函数外部被观察到。如果要修改的AA可能是null,则应将其传递给 - ref

答案 1 :(得分:4)

就像在Java中一样。它是按值传递,但该值是参考 因此,您无法更改引用本身,但您可以修改引用的AA。

答案 2 :(得分:3)

D中的AAs实现为结构https://github.com/D-Programming-Language/druntime/blob/master/src/rt/aaA.d#L82-85,它是按值传递的。但是这个结构包含指向其他结构的指针。如果这个指向struct的指针不是null,那么函数内部的所有修改都将在调用者端可见。

答案 3 :(得分:0)

D中的数组将通过引用传递,但作为“胖指针”进入。你应该特别注意这种情况。

在这种情况下,呼叫站点不受重新初始化阵列的影响: arrX = [new,values,here];

虽然这种情况确实会影响呼叫网站: arrX [index] = newVal;

如果您想要禁止任何一种情况发生,您可以在 const 修饰符前添加前缀。

资料来源:D编程语言 - Andrei Alexandrescu - Addison Wesley。

相关问题