或者存在像 这样的指针和引用C ?
我正在尝试开始使用 vala,但很高兴知道 vala 是“按引用传递”还是“按值传递”
最佳答案
首先你应该明白默认的vala编译器valac
编译为 C(作为一种中间语言)。然后使用 C 编译器(通常是 gcc
)编译代码。valac -C example.vala
将编译为 example.c
因此,您可以自己检查生成的 C 代码。
现在回到真正的问题:
Vala 支持两者 call-by-value
和 call-by-reference
.它甚至比这更细粒度。
让我们举一个使用普通 C 数据类型 (int) 的示例。
按值调用:
public void my_func (int value) {
// ...
}
无论您如何处理
value
,该值都会被复制到函数中。内my_func
它不会影响调用者。使用
ref
进行引用调用:public void my_func (ref int value) {
// ...
}
地址将被复制到函数中。您所做的一切
value
内my_func
也将反射(reflect)在调用方。使用
out
进行引用调用:public void my_func (out int value) {
// ...
}
与
ref
基本相同,但在调用 my_func
之前不必初始化该值.对于
GObject
基于数据类型(非静态类)它变得更加复杂,因为您必须考虑内存管理。由于这些总是使用指针(隐式)管理,
ref
和 `out' 修饰符现在反射(reflect)了(隐式)指针是如何传递的。可以这么说,它增加了一层间接。
string
和数组数据类型也在内部使用指针和自动引用计数 (ARC) 进行管理。虽然 气馁 , Vala 也支持指针,所以你可以有一个
int *
或 MyClass *
就像在 C 中一样。
关于parameter-passing - vala 是 "pass by reference"还是 "pass by value"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31163807/