しかし、reference_wrapperは完全にコピー可能ですので、値は常に変更できるので、デフォルトでnull参照を持つことを避けるのはなぜですか?
何std::reference_wrapper
のポイントはヌル値を持っているだろうか?あなたがnull値を持つ必要がある場合は、単にポインタを使用:P
std::reference_wrapper
を参照のラッパーとして構築され、それはそれです。参照と同じように動作する必要があります。そうでなければ、ラッパーではありません。そのためのユースケースがあります。そのユースケースは、デフォルト値を許可すると壊れる可能性があります。 ヌルの値が必要な場合は、ポインタのようなものを使用するか、参照の制限付きで使用してください。
はまた、あなたはその理由を自分で述べる:
[...]でも、実行時例外が発生しreference_wrapper構築し、デフォルトを使用しているが。
何を参照したのポイントは何ですか? std::reference_wrapper
は、リファレンスと同じように、何かを参照することを意味します。ヌル値を追加すると、ヌルであるかどうかを参照するたびに追加コードが追加されます。
それは多分、はい
[...]多くの利用例は非常に簡単になります。でも、以外のユースケースはるかに難しくなります。ラッパーが有効かどうかをチェックする必要があります。デフォルトのコンストラクターを持つメンバーとして使用されたときなどに初期化することを忘れないでください。要するに
、std::reference_wrapper
は、参照するだけのラッパーで、そのように単純に基準より何か他のもののように振る舞うことができません。すべてに利点と欠点があります。ここではstd::observer_ptr
が必要な場合がありますが、それ以外の場合は何も確認する必要はありません。
おそらくあなたは、アントニー・ホーア、null参照の発明は、後に「数十億ドル規模の間違い」としての彼の発明と呼ばことを知ってほしいです。いいえ、私たちはデフォルトでヌル可能な参照が大変ありがとうございません。 –
ハハ、あなたは大歓迎です。 ;-) – Dejavu