내가 읽고 읽은 바로는 rvalue 인 표현식을 lvalue 참조에 바인딩 할 수 없습니다. 그러나 내가 본 것은 rvalue를 rvalue reference에 바인딩 할 수 있고 명명 된 rvalue 참조가 본래 lvalue이므로 lvalue 참조에 바인딩 할 수 있습니다. rvalue를 lvalue 참조에 바인딩 할 수없는 이유는 무엇입니까? 최적화 목적입니까? 당신이 foo(1)
를 호출 할 때 1
와 같은 임시 int
가 생성되고,왜 rvalue를 lvalue 참조에 간접적으로 바인딩 할 수 있습니까?
#include <iostream>
using std::cout;
void bar (int& b) {
cout << "bar " << b << "\n";
b = 3;
}
void foo (int&& a) {
cout << a << "\n";
bar(a);
cout << a << "\n";
}
int main (int argc, char ** argv) {
foo(1);
}
언어로 인해 재해를 일으킬 수 있다고해서 언어에 문제가있는 것은 아닙니다. 반면에 lvalue 참조가 rvalues에 바인딩되도록 허용하면 본질적으로 추론 할 수있는 함수를 작성하는 것이 본질적으로 불가능합니다. –
관련 http://stackoverflow.com/questions/2577623/some-clarification-on-rvalue-references –
이전에 (한 번 이상) 질문했습니다. 철저하게 검색하면 중복 된 항목을 찾을 수 있습니다. Stroustrup은 (D & E 나 TC++ PL에서 기억할 수없는) 실수를 막는다 고 말합니다 :'void twice (int & x) {x * = 2; } double x = 1.0; 두 번 (x); // does not modify x' – dyp