2014-03-26 1 views
1

이 기능을 사용하거나 사용하는 기능을 주로 이해하려고합니다. 어떤 전화가 다음 위치에 있는지 알 수 있습니다.멤버 함수에 l- 값 및 r- 값 참조 한정자를 허용하는 목적은 무엇입니까?

struct Foo 
{ 
    void bar() & {std::cout << "l-value"; } 
    void bar() && {std::cout << "r-value"; } 
}; 

Foo f; 
f.bar();  // calls l-value version 
Foo().bar(); // call r-value version 

그런 구분의 실제적인 용도는 무엇입니까?

+1

함수를 호출하는 개체가 일시적이며 곧 삭제된다는 점을 알고 있으면 다른 동작을 선택할 수 있습니다 (예 : 딥 복사본 대신 일부 리소스를 이동하는 경우). [이 SO 스레드]에 몇 가지 예가 있습니다. (http://stackoverflow.com/questions/8610571/what-is-rvalue-reference-for-this) – jrok

+0

@jrok 감사합니다. 나는 내가 다른 행동을 선택할 수 있다는 것을 이해했다. 그 행동이 무엇이고 그것이 무엇을 할 수 있는지 이해하려고 노력했다. JohannesD가 지적한 스레드의 대답은 정말 유용합니다. 다른 스레드에 대한 질문에 답변했습니다. [link] http://stackoverflow.com/questions/20717180/in-c-what-categories-lvalue-rvalue-xvalue-etc-can-expressions-that-prod. – CppNoob

답변

2

rvalue 메서드는 이후에 액세스 할 수 없으므로 invocant를 안전하게 이동하거나 무효화 할 수 있습니다. 물론 참조를 반환하거나 저장하면 안됩니다. 따라서 일부 연산의 파괴적인 구현이 더 효율적인 경우에는 안전하게 사용할 수있는 경우에만 r 값을 제공 할 수 있습니다. 캐스팅 오퍼레이터에 대해서도 이동이 고려됩니다.