vala是“按引用传递”还是“按值传递”?

让·皮埃尔·杜迪

还是存在类似C的指针和引用

我正在尝试使用vala,但很高兴知道vala是“按引用传递”还是“按值传递”

延斯·穆伦霍夫(JensMühlenhoff)

首先,您应该了解默认的vala编译器会valac编译为C(作为中间语言)。然后使用C编译器(通常是gcc对代码进行编译

valac -C example.vala 将编译为 example.c

因此,您可以自己检查生成的C代码。

现在到真正的问题:

Vala支持call-by-valuecall-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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

.bind(this)是按引用还是按值传递?

Ruby是按引用传递还是按值传递?

ELM是按引用传递还是按值传递?

python pandas dataframe,是按值传递还是按引用传递

Kotlin是“按值传递”还是“按引用传递”?

Java中的“按值传递”还是“按引用传递”?

PHP变量是按值还是按引用传递?

我应该按引用还是按值传递大型数组?

Swift函数是按值还是按引用分配/传递?

如果 VAR_INPUT 是 INTERFACE 类型,那么值是按引用传递还是按值传递?

python递归通过引用还是按值传递?

在Java中是按值传递数组还是按引用传递数组?

在C ++中按值传递还是按常量引用传递更好?

在C#中,我应该按值传递参数并返回相同的变量,还是按引用传递?

可移动但不可复制的对象:按值传递还是按引用传递?

JDBC的Connection和Statement对象是按引用传递还是按值传递?

困惑,当对象引用被传递时,java是使用按值调用还是按引用调用?

Array.find是否返回值或引用?我的意思是按值传递还是按引用传递?

按值传递vs按右值引用传递

我应该按值还是按引用传递函数对象?

复制赋值运算符应该按const引用还是按值传递?

C# 的 Queue.dequeue() 是按引用还是按值传递?

C#按值传递与按引用传递

在Javascript中按值传递和按引用传递

Pandas 和对按值传递和按引用传递的混淆

C按值传递数组vs按引用传递数组

哪个更快?按引用传递与按值传递C ++

在Android Adapter中按值传递和按引用传递?

c#对象按引用传递或按值传递