2017-02-10 8 views
4

私は変更したくない簡単なC++クラス考えてみましょう:ストップr値を呼び出す移動割り当てC++ 11

foo f{}; 

f = foo{}; 
:私は移動代入演算子を呼び出す以下ならば

class foo {}; 

をその後に

foo f{}; 
foo g{}; 
f = g; 

このような中間gfooを変更または使用せずにコピー代入を起動する方法はあります

std::dont_moveとほぼ同じです!

+0

を参照してください、あなたが持っている*実際の*問題について詳しく説明していただけますか? *なぜ*あなたはこの場合に移動セマンティクスを望んでいないのですか? –

+0

std :: moveの反対が、例えば明示的な参照を使わずに可能であるかどうかだけ疑問です。 – keith

+0

なぜそれが欲しいですか?あなたが隠そうとしているバグがあるようです。 – juanchopanza

答えて

6

std::dont_move()は、自分で実装するのは簡単です:

template <typename T> 
const T& force_copy(T&& v) 
{ 
    return v; 
} 

usage example

+0

私はこの解決策が好きです。 – keith

4

あなたが書くことができます。

f = static_cast<foo const&>(foo{}); 
関連する問題