#include <iostream>
class Foo { };
Foo createFoo() { return Foo(); }
void bar(Foo &&) { std::cout << "in bar(Foo &&)\n"; }
void bar(Foo const &) { std::cout << "in bar(Foo const &)\n"; }
void baz(Foo &&f) {
std::cout << "in baz, ";
bar(f);
// bar(std::move(f));
}
int main()
{
baz(createFoo());
return 0;
}
내 예상 출력은 in baz, in bar(Foo &&)
이지만, 나는 받고 있습니다 : in baz, in bar(Foo const &)
. 전화를 bar
(의견보기)로 전환하면 예상되는 결과를 얻지 만 이는 나에게 잘못된 것으로 보입니다. 컴파일러가 Foo&&
을 Foo&&
으로 변환하지 않고 bar(Foo &&)
을 호출 할 수없는 이유가 있습니까?r 값 참조에 대한 혼란
미리 감사드립니다.
'Foo && f '의'f'는 이름이 지정되어 있으므로 lvalue이므로 rvalue 참조에 직접 바인딩하지 않습니다. – ildjarn