問題タブ [reference-wrapper]
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++ - なぜ std::reference_wrapper は一時的に受け入れませんか?
通常、右辺値は const 参照 ( ) にバインドできconst SomeType&
ます。それは言語に組み込まれています。ただし、std::reference_wrapper<const T>
対応するオーバーロードが意図的に削除されるため、右辺値をコンストラクター引数として受け入れません。この矛盾の理由は何ですか?std::reference_wrapper
値で渡す必要があるが参照セマンティクスを保持したい場合の参照変数の代替として「宣伝」されています。
言い換えれば、const &
バインディングへの右辺値が安全であると見なされる場合、それは言語に組み込まれているため、なぜ C++11 の設計者は右辺値を でラップすることを許可しなかったのstd::reference_wrapper<const T>
でしょうか?
これがいつ便利になるか、あなたは尋ねるかもしれません。例えば:
c++ - Return value of non-initialized reference_wrapper
Where does reference_wrapper
point to when I resize()
the vector below? Is this an undefined behavior? What should I do for safety?
c++ - reference_wrappers のアドレスの比較
保持している参照によって2 つの を比較するにはどうすればよいstd::reference_wrapper
ですか? std::reference_wrapper
2 つの s の参照が等しいかどうかを確認したい。
編集:混乱して申し訳ありません。参照対象のアドレスを取得して比較する方法を意味していました。
c++ - reference_wrapper はそれに応じてアドレスを変更しません
この質問は、この質問の延長です。push_back()
新しいメモリ割り当てが行われ、変更の最初の要素のアドレスが変更されるため、それに応じてそのアドレスを変更std::vector v
すべきではないことを理解していstd::vector v2
ますか?
出力:
c++ - reference_wrapper による const の正確性
さまざまな状況で、多くの関数で処理する必要があるオブジェクトのコレクション (ベクトルなど) があります。オブジェクトを変更する必要がある関数もあれば、そうでない関数もあります。オブジェクトのクラスは、抽象基本クラスから継承できます。したがって、私は次のようなものを持っています:
明らかに (?) とstd::reference_wrapper<A>
の両方に s のprocess_1
同じベクトルを渡すことはできませんprocess_2
。これまでに検討したソリューションには次のものがあります。
- C スタイルのキャストまたは
reinterpret_cast
への参照を使用するvec
T& get()
andT const & get() const
の代わりに独自の参照ラッパーを作成するT& get() const
- ベクトルの代わりにラッパーを取るメソッドなどによるリファクタリング
- ベクトルのコピーを含む、または含まない
const
const
inreference_wrapper
の引数を使用しない
これらはどれも非常にエレガントに見えません。他にできることはありますか?
c++ - Reference_wrapper: Push_back は機能しますが、割り当ては行われません
次のコードでは、push_back()
astd::ref
への a のstd::vector<reference_wrapper<Type>>
割り当てはうまくいきますが、 astd::ref
への a の割り当てはreference_wrapper<Type>
機能しません。なんで?
c++ - 定数参照_ラッパー
次のコードでは、目的は、変更reference_wrapper<int> b
時にa
変更b
も変更されるようにすることですが、その反対は許可されるべきではありa
ません。つまり、変更時にb
変更されるべきではありません。行 7 と行 8 の 2 つの方法を試しました。行 7 では、行 8 が問題なくコンパイルされている間、コンパイラは からint
に変換できないと不平を言いましたが、結果は私が望んでいたものではありませんでした (変更時に変更されました)。何か案が?const int
a
b
c++ - 移転後の住所変更
以下のコードでは、新しいメンバーが に挿入されるたびに、std::vector<int>A
メモリの再割り当てが原因std::vector<reference_wrapper<int>>B
で間違ったアドレスを指します。参照ベクトルを作成して再割り当てを追跡し、常に正しいアドレスを格納することは可能ですか?