2017-02-26 1 views
1

const 참조에 대한 많은 게시물을 읽었지만 찾고있는 항목을 찾지 못했습니다. 임시 변수를 const 참조에 바인딩하여 수명이 연장되는 메커니즘에 대한 제 가정을 수정 해 주시겠습니까?임시 변수에 대한 const 참조 및 뒤에있는 메커니즘

int Foo(){return 3;} 

int main(){ 
const int& ref = Foo(); 
return 0; 
} 

Foo는 레지스터에 위치하며, 일반적으로 이후 해고되는 임시 이름 값을 반환합니다. const 참조에 바인드하면 컴파일러가이를 닫지 않고 ref의 범위와 ref이라는 별칭으로 메모리에 값을 저장합니다.

어떻게 작동하나요?

+0

레지스터와 "메모리"에 관한 모든 이야기는 이러한 현대 시대의 지나친 단순화입니다. 특히 강력한 최적화로 컴파일 된 C++와 같은 언어에 관해서는 특히 그렇습니다. 근원에서 무언가를 보았 기 때문에 그것이 존재할 필요가있는 것이나 기대할 수있는 곳에서 존재할 필요가있는 것을 의미하지는 않습니다. 예를 들어,'int main() {return 0;}'과 같은 코드를 컴파일한다. '3'은 전혀 저장되지 않습니다. –

답변

0

이 언어는 실제로 이것이 어떻게 구현되어야하는지, 실제로 어떻게 작동해야 하는지를 말하지는 않지만 가능한 한 가지 방법을 제시합니다.

이론적으로 컴파일러가 임시로 레지스터를 유지하지 못하도록하고 ref을 이름으로 사용하지 마십시오. 그래서 그것은 값을 메모리에 저장하지 않아야합니다.

또는이 특별한 경우에 컴파일러는 값이 항상 3이라는 것을 알 수 있으므로 ref의 모든 용도를 3으로 바꿀 수 있으며 아무 곳에도 저장하지 않을 수 있습니다.

1

푸 임시 이름 값을

수정을 반환합니다. 레지스터

표준에서 지정되지 않은 위치에

.

정상적으로 이후 전체 식의 말에 파괴

기각은보다 정확합니다. 일생이 참조로 확장되지 않았다면.

물론 정수는 소멸자가 없으므로 수명은 단순히 저장소 (있는 경우)를 다시 사용할 수 있는지 여부를 나타냅니다. 이 참조에서 const 바인딩

컴파일러를 기각하지만

정확한 REF의 범위로 메모리의 값을 저장하지 않도록 지시. 임시 참조를 바인딩하면 해당 임시 참조의 수명이 참조 수명에 맞게 확장됩니다.

관련 문제