다음 C ++ 표준에서 나올 R- 값 참조는 무엇입니까?
-
21-08-2019 - |
문제
다음 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
벡터에있는 모든 데이터의 비싼 사본을 수행하지 않고.
제휴하지 않습니다 StackOverflow