还是存在类似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
将反映在呼叫方。
通过引用进行呼叫out
:
public void my_func (out int value) {
// ...
}
基本上与相同ref
,但是在调用之前不必初始化值my_func
。
对于GObject
基础数据类型(非静态类),它变得更加复杂,因为您必须考虑内存管理。
由于这些总是使用指针(implictly)管理的ref
和`out'修饰符反映,现在的(隐含的)指针是如何传递。
可以这么说,它增加了一个间接级别。
string
数组和数据类型也可以使用指针和自动引用计数(ARC)在内部进行管理。
尽管不建议使用,但Vala确实支持指针,因此您可以在C中有一个int *
or MyClass *
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句