gpt4 book ai didi

system-verilog - SystemVerilog 与 C++ 赋值 : reference or copy?

转载 作者:行者123 更新时间:2023-12-05 00:31:19 24 4
gpt4 key购买 nike

我主要有 C++ 背景。我正在追踪我正在处理的一些 SystemVerilog 代码中的错误,并惊讶地发现我认为是对象复制分配的实际上是引用分配。这个简化的代码显示了我的意思:

for (int i = 0; i < max_num; ++i)
{
var cls_obj obj1;
obj1 = obj_array[i];

some_function(obj1); // modifies the object passed in

// at this point BOTH obj1 and obj_array[i] are modified.

// some other code goes here
}

我只期待 obj1进行修改。这是因为 var 关键字吗? SystemVerilog 中的复制赋值与引用赋值究竟是如何工作的?我很难从网络搜索中找到信息。

最佳答案

SystemVerilog 中的类变量是引用或句柄。仅当您使用 new 时才会创建实例关键词。

所以在你的例子中,obj1obj_array[i]两者都引用(或指向)同一个实例。

默认情况下,SystemVerilog 中的函数参数是按值传递的。然而,类句柄被视为值,因此您传递给函数的任何类都有效地通过引用传递。

在初始化类对象时,语言中有一个内置的机制来做一个浅拷贝。

Packet p1;
Packet p2;
p1 = new;
p2 = new p1;

这是一个浅拷贝。对于对象,仅复制句柄!

IEEE 1800-2009 第 8.11 章中的示例对此进行了解释。
var关键字与您所看到的行为没有任何关系。事实上,我什至从未见过或使用过 var .根据 LRM,这允许在声明变量时省略类型。在您的代码中,指定了类型 (cls_obj),因此我认为它的存在没有任何作用。

关于system-verilog - SystemVerilog 与 C++ 赋值 : reference or copy?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14989776/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com