2017-11-17 11 views
2

요즘 정적 키워드 주위에 머리를 쓰려고했는데 여기서 함수 내에서 변수 선언에 정적 키워드를 사용하려고합니다. 그래서 같이 :예기치 않은 정적 카운터 변수 동작

void counter()                       
{                          
    static int counter = 0; //should be initialized only once and once only       
    counter++; //increment for every call of this function            
} 

I 인해 변수가 정적 인에, 그것이 내가 카운터를 인쇄하기로 결정 곳에서 그러므로 함수 외부 살고있는 것으로 이해하고, 그 함수 counter()가 호출 나에게 횟수를 제공해야 .

1. 나는 무엇을 놓치고하시기 바랍니다되었다 나는 10 번을받을 것으로 예상이 테스트에서

int main()                        
{                          
    for(unsigned int i = 0; i < 10; i++){                
     counter();                      
    }                         
    std::cout << counter << std::endl;                 

    return 0;                       
} 

... 대신 코드가 반환 카운트의 수 : 그래서 같이 간단한 테스트를했다 이리?

다음과 같은 "유사한"문제에 대한 다른 제출물을 발견했습니다. static counter in c++ 그러나 대부분 클래스에서 사용되는 정적 키워드를 중심으로 회전합니다.

+0

'std :: cout << counter' 대'std :: cout << counter()'입니다. 인쇄상의 오류 일뿐입니다. –

+0

하지만 void 대신 아무 것도 반환하지 않는'counter() '함수를 출력하지 않고 대신'counter()'함수에 정의 된 정적 변수'counter'를 출력합니다. –

+2

정적 변수'counter' 'counter()'함수 안에서만 접근 할 수있다. 그것의 바깥 쪽 ** 식별자 ** counter는 함수를 참조합니다. –

답변

2

counter이 (가) main()에 인쇄되어 있습니다 (선언되지 않았 음). 을 counter()에 넣었다고해서 그것이 main()에 액세스 할 수있는 것은 아닙니다.

당신이 할 경우

void counter() { 
    static int counter = 0; 
    std::cout << counter++ << std::endl; 
} 

int main() { 
    for(unsigned int i = 0; i < 10; i++){ 
     counter(); 
    } 
    return 0; 
} 

당신은 카운터 증분을 볼 수 있습니다.

2

counterlocal 여전히 변수 내부에 있으므로 여전히 반환해야합니다.