コンパイラは左辺値を右辺値参照にバインドしようとしていると不平を言っていますが、どのように見えません。私はC++ 11、移動セマンティクスなどが新しくなっていますので、私に同行してください。LvalueからRvalueへの参照バインディング
私はこの機能を持っている:私は、次のようなエラーを得続ける
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 &&'
挿入()の呼び出しに
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.
}
このメソッドを呼び出しています。演算子のオーバーロードで右辺値としてkey
が定義されていませんか?なぜそれが左辺値として再解釈されているのですか?
ありがとうございました。
左辺値の型が「キー」ではありませんか? rvalue-reference-nessはどのように保存されていますか? – hvd
これは動作しますが、私はhvdが引き起こした問題を理解しているかどうかはわかりません。あなたは説明できますか? –
@hvd彼女に引き継がれる引数型の減算がないので、保存されます。私の編集を参照してください。 – polkadotcadaver