2016-10-01 2 views
-1

A local class cannot access local variables of the function in which it is defined.로컬 클래스가 둘러싼 범위의 변수에 액세스 할 수없는 이유는 무엇입니까?

왜 이런가요? C++에서이 규칙을 사용하는 이유는 무엇입니까?

+0

먼저 변수의 범위가 무엇인지 알아보십시오. –

+2

가변 범위를 알고 있습니다. 이것은 C++ 작성자가 로컬 클래스에 적용하는 제한 사항이므로 사실을 먼저 이해해야합니다. –

+1

C++에서 클래스는 Java 클래스처럼 범위를 상속하지 않습니다. – tkausl

답변

1

몇 가지 공통 언어 (예 : 파이썬, 이것을 허용하십시오.

그러나 현지인에 대한 언급이 허용되고이 코드가 컴파일 될 수 있다면이 상황을 생각해보십시오.

struct MyClass { 
    virtual fetchValue() = 0; 
}; 

MyClass* somefunction(){ 
    int localVariable = 123; 
    struct HypotheticalClass : public MyClass { 
     virtual int fetchValue(){ return localVariable; } 
    }; 
    return new HypotheticalClass() 
} 

이제 된 SomeFuncion()의 끝이 MyClass의 유도체 돌아온 이것은 지금 무효 스택 위치에 대한 참조를 유지한다. 팔.

물론 잘못된 스택 위치를 부적절하게 참조하는 다른 여러 가지 방법이 있습니다. 예를 들어, 해당 로컬 변수에 대한 참조를 클래스에 전달하여 어쨌든 액세스 할 수 있습니다. 그리고 로컬 참조에 액세스 할 수 있거나 사본을 만들 수있는 람다 (lambdas)에 대해서도 동일한 문제가 있습니다.

이유에 대한 권위있는 대답은 4 판 Stroustrup을 살펴보고 유용한 정보는 없습니다.

흥미로운 질문에 감사드립니다.

관련 문제