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 成员变量即可。
考虑以下代码:
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 成员变量即可。