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