2017-09-12 20 views
0

다음 코드를 고려 보여줍니다 : 나는 몸 시퀀스를 가지고 가정, 내 코드에서정적 정수 예기치 않은 동작이

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이 1이 아닌 예상 값 2를가집니다.

my_class_A이 body가 실행될 때마다 파괴됩니다 (% p를 사용하여 이것을 확인합니다), 완전히 다른 객체 인 my_class을 다시 실행해서는 안됩니다.

아마도 여기에 내 이해가 부족합니다. 감사합니다

답변

3

static 변수는 하나의 변수 사본과 시간 0 이전에 해당 변수의 초기화가 있다는 것을 의미합니다. static 키워드가 없으면 함수가 가져올 때마다 할당되고 초기화되는 자동 변수 였을 것입니다 라는.

개체가 생성 될 때마다 초기화되는 변수를 원하면 클래스 멤버 변수로 선언하면됩니다.

+0

나는 클래스 변수로 만들었는데, 이것은 보통 내가하는 일이다 (나는 다른 것을 시도 할 것이라고 생각했다). 이 동작이 다른 OO 언어와 다른가요? 클래스의 모든 객체에는 정적 변수의 자체 복사본이 있다고 가정했습니다. – noobuntu

+1

SV 정적 클래스 변수 동작은 Java 및 C++과 동일합니다. –