请考虑以下代码:
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的序列 -
// ** body
task body();
my_class my_class_A = new;
my_class_A.my_function();
endtask
我的问题是,如果我在测试中拨打body
两次,第二次my_static_int
的值为2,而不是我预期的值为1.
由于每次运行主体时都会销毁my_class_A
(我使用%p验证这一点),因此my_class
完全不同的对象的后续运行不应再次打印值
也许我的理解在这里缺乏..感谢任何帮助
答案 0 :(得分:3)
static
变量意味着在时间0之前只有一个变量副本和一个变量初始化。没有static
关键字,它将是一个自动变量,它被分配和初始化每次调用函数时。
如果你想要一个每次构造对象时都被初始化的变量,只需将它声明为一个类成员变量。