gpt4 book ai didi

parameter-passing - vala 是 "pass by reference"还是 "pass by value"?

转载 作者:行者123 更新时间:2023-12-05 00:21:43 32 4
gpt4 key购买 nike

或者存在像 这样的指针和引用C ?

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

最佳答案

首先你应该明白默认的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) {
// ...
}

地址将被复制到函数中。您所做的一切 valuemy_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/

32 4 0