class 方法中的静态整数显示意外行为

Static integer in a class method shows unexpected behaviour

考虑以下代码:

class my_class;

  // *** constructor
  function new(string name = "");
    super.new(name);
  endfunction

  // ** my_function
  function void my_function();
    static int my_static_int = 0;
    my_static_int++;
    $display("my_static_int = %0d", my_static_int);
  endfunction

endclass

在我的代码中,假设我有一个正文为 -

的序列
// ** body
task body();

  my_class my_class_A = new;
  my_class_A.my_function();

endtask

我的问题是,如果我在测试中两次调用 body,第二次,my_static_int 的值为 2 而不是我预期的值 1。

因为每次 body 为 运行 时 my_class_A 都被销毁(我使用 %p 验证了这一点),后续 运行 不应该在 [=16 的完全不同的对象上=] 再次打印值 1

可能是我的理解不够.. 任何帮助表示感谢

A static 变量意味着在时间 0 之前只有一个变量副本和该变量的一次初始化。如果没有 static 关键字,它将是一个自动分配的变量并在每次调用函数时初始化。

如果您希望在每次构造对象时都初始化一个变量,只需将其声明为 class 成员变量即可。