그것은 무의미한 것입니다. 함수의 내용을 변경하면 변경 내용은 실제로 일시적이기 때문에 즉시 잃게됩니다.
새로운 유형의 이유는 실제로 rvalue와 무엇이 아닌지를 결정할 수 있어야하기 때문입니다. 그래야만 실제로 사용 된 멋진 것들을 사용할 수 있습니다. '당신은 몇 가지를 rvalue를하고 TOUPPER을 전달하면 우리가 임시 어쨌든 던져 - 멀리 것입니다 알고 있기 때문에 지금
string toupper(string && s) { // for nonconst rvalues
for(char &c : s) make_uppercase(c);
return move(s); // move s into a returned string object
}
string toupper(string const& s) { // for the rest
// calls the rvalue reference version, by passing
// an rvalue copy.
return toupper(string(s));
}
는의를 rvalue 직접 수정할 수 있습니다, 그래서 우리는 그것을하고 돈을 변경할 단지 aswell 수 있습니다 그것을 복사 할 필요가 없다. 또한, 동일한 관찰이 이동 생성자 및 이동 할당이라고 불리는 것에 대해 사용됩니다. 오른편은 복사되지 않지만 그 물건은 도난 당했고 *this
으로 옮겨졌습니다.
rvalues가 const가 아닌 왼쪽 값 참조에 바인딩 될 수 있다고 말하면, 마지막으로 왼쪽 값 (명명 된 객체) 또는 오른쪽 값 (임시)을 참조하는지 여부를 파악할 방법이 없습니다.
그것은 아마 좀 알고하지만 어쨌든 유용합니다, 당신은 멤버 함수에 좌변 또는를 rvalue 심판-한정자를 넣을 수 있습니다. 여기에 자연스럽게 내장 객체 매개 변수를 rvalue 참조 기존의 의미를 확장하는 예이다 : 지금
struct string {
string& operator=(string const& other) & { /* ... */ }
};
, 당신은 더 이상 말할 수없는 혼란과 만드는 정말 아니다
string() = "hello";
대부분의 시간을 감지합니다. 위의 &
은 할당 연산자가 lvalues에서만 호출 될 수 있다고 말합니다. 동일한 값은 &&
을 넣음으로써 결정할 수 있습니다.
나는 이것이 왜 3 표를 얻었는지 궁금하다. 투표를하지 않고 질문을 한 번도 즐겨 보지 못했다고 생각하지 않습니다 (투표에서 제외되거나 잠겨 있지 않는 한). – Zifre
나는 누군가가 어떤 식 으로든 생각하는 이유를 궁금해하며, 다른 사람들은 그가하는 일과 똑같이 할 것이라고 기대합니다. – user534498
나는 "좋고 upvote를주는"것이 왜 불합리한 기대인지 궁금하다. –