컴파일러는 lvalue를 rvalue 레퍼런스에 바인드하려고하는데 불평을 계속합니다. 그러나 어떻게 볼 수는 없습니다. 나는 C++ 11, move semantics 등을 처음 사용하기 때문에 나와 함께 견뎌야한다. 이 메소드를 호출Lvalue에서 rvalue 로의 레퍼런스 바인딩
template <typename Key, typename Value, typename HashFunction, typename Equals>
Value& FastHash<Key, Value, HashFunction, Equals>::operator[](Key&& key)
{
// Some code here...
Insert(key, Value()); // Compiler error here
// More code here.
}
:
template <typename Key, typename Value, typename HashFunction, typename Equals>
void FastHash<Key, Value, HashFunction, Equals>::Insert(Key&& key, Value&& value)
{
// ...
}
나는 다음과 같이 점점 오류를 계속 : 삽입() 호출에
cannot convert argument 1 from 'std::string' to 'std::string &&'
나는이 기능을 가지고있다. 연산자 오버로드에서 r 값으로 key
이 정의되어 있지 않습니까? 왜 그것이 lvalue로 재 해석되고 있습니까?
감사합니다.
lvalue의 유형이 "Key"가 아닌가요? rvalue-reference-ness는 어떤 방식으로 보존됩니까? – hvd
이 작동하지만 hvd 제기 한 문제를 이해할 수 있는지 잘 모르겠습니다. 설명해 주시겠습니까? –
@hvd 그녀가 진행하는 인수 유형 공제가 없기 때문에 보존됩니다. 제 편집을 참조하십시오. – polkadotcadaver