問題タブ [move-semantics]
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++ - 左辺値を右辺値参照にバインドすると、コンストラクターが移動し、関数が返されます
私が知っていることによると、左辺値を右辺値参照にバインドすることは無効です。そして第二に、左辺値式は、アドレス-of演算子(&)によって接頭辞を付けることができるという事実によって認識できます。
この2つの文が次のコードで正しい場合、私は少し困っています。
私が間違っているところは?
templates - ポストブリットと移動のセマンティクスに関する質問
少し前に同じような質問をしましたが、詳細はまだわかりません。
ポストブリットコンストラクターはどのような状況で呼び出されますか?
オブジェクトを移動するセマンティクスは何ですか?ポストブリットおよび/または破壊されますか?
ローカル変数を値で返すとどうなりますか?暗黙的に移動されますか?
式を右辺値にキャストするにはどうすればよいですか?たとえば、一般的なスワップはどのようになりますか?
c++ - 移動元のオブジェクトを破棄する必要がありますか?
a
から移動-構築する場合b
、それでも破壊する必要b
がありますか、それともそうせずに逃げることができますか?
optional<T>
この質問は、テンプレートの実装中に頭に浮かびました。抜粋:
もちろん、boolinitialized
を、初期化、非初期化、および移動元を区別する3値の列挙に置き換えることもできます。これが厳密に必要かどうかを知りたいだけです。
c++ - 移動元のオブジェクトで何ができますか?
標準は、オブジェクトが移動された後、オブジェクトで何ができるかを正確に定義していますか?以前は、移動元のオブジェクトでできることは、オブジェクトを破棄することだけだと思っていましたが、それだけでは不十分です。
たとえばswap
、標準ライブラリで定義されている関数テンプレートを考えてみましょう。
明らかに、移動元のオブジェクトに割り当てることができる必要があります。そうしないと、2行目と3行目が失敗します。では、moved-fromオブジェクトで他に何ができるでしょうか?これらの詳細は、標準のどこに正確に記載されていますか?
(ちなみに、 1行T c = std::move(a);
目ではなくなぜT c(std::move(a));
ですか?)
c++ - セマンティクスを移動し、const値を返す
私には、すべてを「const」値として返す習慣(?!?!?)があります。このような...
移動操作とr値参照および次の関数を使用して...
もう書けない…
const値を返す規則を使い始めた主な理由は、誰かがこのようなコードを記述できないようにするためです...
ユースケースは次のとおりです...
この特定のユースケースでは、「const値を返す」とr値の参照が混在していないように見えます。そうですか?
オブジェクトはとにかく一時的です。なぜ「const」は移動を防ぐ必要があるのですか?なぜ「一定の」一時的なものを移動できないのですか?
operator-overloading - `M演算子+(M &&、M &&)`のC++11オーバーロード
更新:明確化、より明確な焦点、および短縮された例:
- 過負荷を回避できます
M op+(M&&,M&&)
か?仮に、RValuesを適切に処理したいですか?他の3つのオーバーロードが必要だと思います。
(&&,&&)
そもそも私が過負荷になっている理由:
- 通常は提供しませんが
M op+(&&,&&)
、必要なようです。オーバーロードを提供する(&&,&)
と(&,&&)
、コンパイラがあいまいになります。それを解決してから別の実装バリアントを追加するより良い方法はありますか?
完全なコードを確認することもできます。
c++ - 変更可能な左辺値への変更可能な右辺値参照のバインド
3 つの質問があります。
左辺値を右辺値参照に直接バインドできますか?
であるオブジェクトはどうなります
std::move()
か?std::move と の違いは何
std::forward
ですか?
c++ - パラメーターのバインディングは引数の評価後に順序付けされますか?
次の関数があるとします。
次のように関数を呼び出すと:
すべての引数は、パラメータにバインドされる前に完全に評価されていますか? その場合、std::move
は単に を参照する xvalue を生成するため、無害numbers
です。それとも、評価されるとすぐに、個々の引数をそのパラメーターにすぐにバインドできますか? その場合、はすでに に移動されている可能性がnumbers[0]
あるため、未定義の動作を引き起こす可能性があります。numbers
vec
c++ - イニシャライザリスト-コピー不可能な(ただし移動可能な)オブジェクトのベクトルを構築する
コピーできpush_back
ないが移動可能なタイプの値をそのタイプのベクトルに再値付けすることができます。
ただし、同じ右辺値を使用してベクトルをinitializer-list-constructしようとすると、コピーコンストラクターが必要であるというエラーが発生します。
GCC4.7で次のエラーが発生します。
これは許可されるべきですか?許可されることに対する技術的な障害は見当たりませんが、現時点ではスタンダードを手元に置いていません...