編集:私が質問していることの最も可能性の高いユースケースは、から右辺値参照のタプルを受け取る関数を作成するときだと思いますstd::forward_as_tuple()
。
この質問が頭に浮かんだのは、コンストラクタ初期化子に渡されたオブジェクトのメンバーをチェックして、それらが右辺値参照であるかどうかを確認していたためです(これは間違っている、間違っている、間違っている、と言ってアドバイスを受け付けています...うまくいけば、将来これを避けるための経験則ですが、それが質問を促したものです)。少し異なるコンテキストで、右辺値参照メンバーを持つオブジェクトを、制御する場合としない場合がある複数の関数(または関数オブジェクト)に渡してしまう可能性があり、それらのメンバーから移動する可能性があります。
template<typename... Args>
void my_func(std::tuple<Args...>&& tup) {
//if tup's members are rvalue references,
//and this function moves guts from tup members, then...
func_i_dont_control(tup);
//what happens here if moves are done on the same members?
another_func_i_dont_control(std::move(tup));
}
右辺値参照メンバーの使用を見てきましたか?、右辺値参照メンバーの他のいくつかの議論と一緒に、しかし私はこれを明確に整理することができません。
何が起こるかだけでなく、このシナリオが発生するかどうか、また、右辺値参照メンバーを含むオブジェクトを渡すときに留意すべき重要なルールを尋ねています。