optional
とvariant
は、特に割り当てに関して、リファレンスタイプで何をすべきかについて進行中の議論があります。この問題に関する議論をよりよく理解したいと思います。引数を回避し、まだ私たちのほとんどの機能を与えるために -オプション<T&>割り当て時に再バインドする必要があるのはなぜですか?
optional<T&> opt;
opt = i;
opt = j; // should this rebind or do i=j?
現在、意思決定が病気に形成されたoptional<T&>
を作成し、タイプのいずれかが参照型である場合、variant::operator=
が病気に形成されたようにすることです。
opt = j
は、の基礎となる参照を再バインドする必要がありますか?
template <class T>
struct optional<T&> {
T* ptr = nullptr;
optional& operator=(T& rhs) {
ptr = &rhs;
return *this;
}
};
あなたの例では、 'opt = i'が参照をバインドし、次に' opt = j'が参照を使って割り当てた場合、気にしないでしょうか? –
割り当てを使用して通常参照を結びつけることはほとんどできません。 –
'opt'が関数の引数として与えられたときに特に気になり、実行時に' opt = i; 'が代入するかどうかによって決まります –