2014-05-20 3 views
0

아무에게도 다음 코드에서 어떤 일이 일어나는지 말해 줄 수 있습니까? lvalue 오류를 기대하고 있었고 함수의 참조 반환 유형을 제거하면 발생합니다. 하지만 20 점을 내게주는거야. 설명해 줘. 감사.C++ 참조 및 lvalue

int &fun() 
{ 
    static int x = 10; 
    return x; 
} 
int main() 
{ 
    fun() = 20; 
    cout << fun(); 
    return 0; 
} 
+0

어느 부분을 이해하지 못합니까? – juanchopanza

+0

'x'가 정적이라는 사실을 잊지 마십시오. – 101010

+2

아마도'x' static을 사용하여 static이 아닌 지역 변수에 대한 참조를 반환하는 것에 대한 경고를 컴파일러에서 제거 할 수 있습니다. – Jeff

답변

3

예상대로 출력됩니다. 전화 fun() = 20;에서 fun()에서 실제xfun() 반환 참조x에 있기 때문에, 20 할당됩니다. cout<<fun(); 호출에서 할당 된 값인 20이 인쇄됩니다.

xstatic으로 선언되었으므로 func()이 반환 된 후에도 메모리에서 사용할 수 있습니다. 메소드 범위가 static 인 메소드는 메소드에서 처음 발생할 때 작성되며 프로그램이 종료 될 때까지 보유됩니다. static 변수는 번만으로 초기화되고 후속 메서드 호출에는 마지막으로 업데이트 된 값이 표시됩니다. staticherehere에 대해 자세히 알아보십시오.

+2

또한 'x'는 한 번만 초기화된다는 점에 유의할 필요가 없습니다. – mavam

2

기본 C++의 의미 : 반환 형식이 참조되지 않는

  • 당신은 함수의 반환 값에 할당 할 수 없습니다.
  • 변수가 static 변수가 아니면 함수가 로컬 변수에 대한 참조를 반환 할 수 없습니다.
  • 정적 변수의 값은 액세스간에 지속됩니다.

당신이 fun() 외부 x 뭔가를 지정하려면는 x 오른쪽 어딘가에 살고있다? 그것을 static으로 만들면 매번 다시 액세스 할 수있는 영구적 인 장소가됩니다. 그것이 20의 가치가 지속되는 이유입니다.

+0

포인트 주셔서 고맙습니다. – sarath

관련 문제