Kompilator utrzymuje skarży Próbuję powiązać lwartością do odniesienia rvalue, ale nie widzę w jaki sposób. Jestem nowy w C++ 11, poruszam semantykę itp., Więc proszę o zachowanie mnie.lwartości do rvalue wiążące odniesienie
mam tej funkcji:
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.
}
który wywołuje tę metodę:
template <typename Key, typename Value, typename HashFunction, typename Equals>
void FastHash<Key, Value, HashFunction, Equals>::Insert(Key&& key, Value&& value)
{
// ...
}
trzymam błędy uzyskiwanie tak:
cannot convert argument 1 from 'std::string' to 'std::string &&'
na Insert() rozmowy. Czy nie jest key
zdefiniowana jako wartość runt w przeciążeniu operatora? Dlaczego jest on ponownie interpretowany jako l-wartość?
Dzięki.
nie Czy typ lwartości właśnie „klucz”? W jaki sposób zachowuje się nadal odniesienie do rwartości? – hvd
To działa, ale nie jestem pewien, rozumiem problem, który podniósł hvd. Czy możesz wytłumaczyć? –
@hvd Zostało to zachowane, ponieważ nie ma tam odliczania typu argumentacyjnego - zobacz moją edycję. – polkadotcadaver