문제

다음 C ++ 표준에서 나올 R- 값 참조는 무엇입니까?

도움이 되었습니까?

해결책 3

여기 정말 길다 기사 Stephan T. Lavavej에서

다른 팁

보세요 C ++ 0x rvalue 참조가 기본값이 아닌 이유는 무엇입니까? , 그것은 그들의 실제 용도를 상당히 잘 설명합니다.

R- 값 또는 L- 값에 대한 참조를 전달하는 코드를 구별 할 수 있습니다. 예를 들어:

void foo(int &x);

foo(1); // we are calling here with the r-value 1. This would be a compilation error

int x=1;
foo(x); // we are calling here with the l-value x. This is ok

r- 값 참조를 사용하면 위의 첫 번째 예와 같이 임시를 참조 할 수 있습니다.

void foo(int &&x); // x is an r-value reference

foo(1); // will call the r-value version

int x=1;
foo(x); // will call the l-value version

이것은 해당 객체를 사용하는 다른 함수로 개체를 생성하는 함수의 반환 값을 전달하려고 할 때 더 흥미 롭습니다.

std::vector create_vector(); // creates and returns a new vector

void consume_vector(std::vector &&vec); // consumes the vector

consume_vector(create_vector()); // only the "move constructor" needs to be invoked, if one is defined

이동 생성자는 사본 생성자처럼 작용하지만 L- 값 (CONST) 참조 대신 R- 값 참조를 취하도록 정의됩니다. R- 값 시맨틱을 사용하여 생성 된 임시로 데이터를 옮길 수 있습니다. create_vector 그리고 그것들을 논쟁으로 밀어 넣습니다 consume_vector 벡터에있는 모든 데이터의 비싼 사본을 수행하지 않고.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top