問題タブ [pass-by-rvalue-reference]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 関数テンプレートのこれら 2 つの定義の違いは何ですか?
対
どちらがより良く、より推奨されますか?または、両方よりも優れた代替手段はありますか?
c++ - 右辺値として参照渡し
moveメンバーを参照渡しとして呼び出そうとすると、コンパイラはエラーをスローしますが、メンバー関数を再定義して値渡しすると機能します。
メンバー関数で右辺値として参照渡しを使用できませんか?
c++ - 右辺値参照によって渡された引数を返す
クラスA
と関数がある場合
から戻るときはコピー コンストラクタが呼び出されますが、a
から戻るf
ときはムーブ コンストラクタが使用されg
ます。ただし、私が理解していることから、f
安全に移動できるオブジェクトのみを渡すことができます (一時オブジェクトまたは移動可能としてマークされたオブジェクトのいずれか、たとえば を使用std::move
)。から戻るときに移動コンストラクターを使用するのが安全ではない例はありますf
か? なぜa
自動保存期間が必要なのですか?
ここで回答を読みましたが、一番上の回答a
は、関数本体の他の関数に渡すときに仕様が移動を許可してはならないことを示しているだけです。戻るときに移動することが安全である理由を説明していませg
んf
。return ステートメントにたどり着いたら、 のa
内部はもう必要ありませんf
。
更新 0
したがって、完全な式の終わりまで一時的にアクセスできることを理解しています。ただし、f
静止から戻ったときの動作は、一時または xvalue を移動しても安全であるという言語に根付いたセマンティクスに反しているようです。たとえば、 を呼び出すと、どこかに保存されている一時ファイルへの参照が存在する可能性がありますが、一時ファイルはg(A())
for の引数に移動されます。xvalueg
で呼び出した場合も同じことが起こります。一時値と xvalue のみが右辺値参照にバインドされるため、一時値または xvalue のいずれかが渡されたことがわかっているため、 から戻るときにg
移動する必要があるセマンティクスについては一貫しているようです。a
f
a
c++ - コンストラクターを再利用します。右辺値を const 左辺値に渡し、実装を繰り返さない
コードの繰り返しを簡単に削除する方法を考えています。使用可能か、良いか、アップグレードしようかどうかを理解するのを手伝ってください。
この呼び出し
私が呼び出しを理解する限り#3
-> #2
-> #1
. そして、この呼び出し
#2
-> #1
. そのような実装は余分なコピーを提供しませんstd::string
か?
parameter-passing - pass-by-result と pass-by-value-result の違いは何ですか?
私はこの説明を見つけました:
値による呼び出し: プロシージャに入るコピー
結果による呼び出し: プロシージャの外に出るコピー
値による呼び出しの結果: コピーが入り、再び出る
しかし、入力をコピーしないと、結果による呼び出しが参照による呼び出しとどのように異なるか、および手順の最後にコピーを作成する理由がわかりません。誰でも説明できますか?