Il compilatore continua a lamentarsi Sto tentando di associare un lvalue a un riferimento di rvalue, ma non riesco a vedere come. Sono nuovo di C++ 11, spostare la semantica, ecc., Quindi per favore portami con me.Lvalue to rvalue reference binding
Ho questa funzione:
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.
}
che chiama questo metodo:
template <typename Key, typename Value, typename HashFunction, typename Equals>
void FastHash<Key, Value, HashFunction, Equals>::Insert(Key&& key, Value&& value)
{
// ...
}
continuo a ricevere errori come il seguente:
cannot convert argument 1 from 'std::string' to 'std::string &&'
sulla chiamata Inserisci(). key
non è definito come un valore massimo nel sovraccarico dell'operatore? Perché viene reinterpretato come un lvalue?
Grazie.
Non è il tipo di lvalue solo "Chiave"? In che modo il valore di riferimento-valore è ancora conservato? – hvd
Funziona, ma non sono sicuro di aver capito il problema sollevato da hvd. Potresti spiegare? –
@hvd Viene conservato perché non vi è alcun tipo di detrazione argomento in corso su di lei - consultare la mia modifica. – polkadotcadaver