std::optional<int&> xx;
最新のgcc-7.0.0スナップショットではコンパイルされません。 C++ 17標準には参照用にstd::optional
が含まれていますか?そしてなぜそれができないのですか? (専用の専門内のポインタを有する実装らしい何の問題も引き起こさないwhould。)[オプション]GCCが参照用にstd :: optionalを拒否する理由は?
答えて
optional
は、C++ 17で標準化されているため、参照型は許可されていません。これは設計上除外されています。
これには2つの理由があります。 1つは、構造的に言えば、optional<T&>
はT*
に相当するということです。それらは異なるインターフェースを持つかもしれませんが、同じことをします。
第2の点は、正確にoptional<T&>
がどのように振る舞うべきかという疑問について、標準化委員会によって合意が実質的になかったことです。
は、次のことを考えてみましょう:
optional<T&> ot = ...;
T t = ...;
ot = t;
その最後の行には何をすべき? ot
によって参照されているオブジェクトを取得していて、それにコピーアサインすると、*ot == t
?または、格納されている参照自体を再バインドする必要があります。つまり、ot.get() == &t
?さらに悪いことに、割り当ての前にdo different things based on whether ot
was engaged or notになりますか?
一部の人々は1つのことをすると予想しますが、一部の人はそれを他の人がやると予想します。したがって、どちらの側を選んでも、誰かが混乱することになります。
あなたの代わりにT*
を使用していた場合、たまたま非常に明確になります:
T* pt = ...;
T t = ...;
pt = t; //Compile error. Be more specific.
*pt = t; //Assign to pointed-to object.
pt = &t; //Change pointer.
Inを:
参照型のためのオプション、または場合によってCVのテンプレートのインスタンス化を必要とするプログラム - 修飾タイプ
in_place_t
またはnullopt_t
が不正です。
std::optional<T&>
はありません。今のところ、std::optional<std::reference_wrapper<T>>
を使用する必要があります。
willこれは ' - >'をサポートしていますか? 'std :: reference_wrapper'は' operator-> 'を実装していないようです。したがって、 'o-> foo'は動作しません。 –
@ JohannesSchaub-litbあなたは 'o-> get()。foo'のように2つの回帰が必要です。' - > 'は' reference_wrapper'を与えます。私は最終的に代入時にリバインドするオプションの「
- 1. 未処理の拒否保持参照
- 2. std :: experimental :: optional <>は参照をサポートしますか?
- 3. mandril拒否理由:unsigned
- 4. std :: futureのパラメータで参照を使用できない理由
- 5. paypalの理由10544ゲートウェイ拒否エラー
- 6. 拒否の理由でsqlldrの拒否ファイルを生成します。
- 7. Websphere MQメッセージに拒否理由を公開する
- 8. のVisual Studio - 参照を追加し、アクセスが拒否された
- 9. ウェブページの「ここ」のリンクを拒否する理由
- 10. リソース参照にUrl.Contentを使用する理由
- 11. std :: anyとstd :: optionalのany_cast
- 12. 拒否された/拒否されたプルリクエストを処理する
- 13. Blockchainが私のAPIキーを拒否した理由
- 14. NFS rpcメッセージを拒否する不明の理由
- 15. は、STDでiterator->第二に割り当てる理由を私は理解していない参照
- 16. 'this'がグローバルオブジェクトではないオブジェクト 'obj'を参照する理由
- 17. C++ 11:GCC 4.8静的thread_local std :: unique_ptr未定義参照
- 18. Clickonce ftp公開がポリシー理由で拒否されました
- 19. 理由でアプリが拒否されました2.9
- 20. DocumentDBのreplaceDocument要求が拒否された理由
- 21. だから理由ます。mkdir拒否の
- 22. サイクルプラグインがスクロールを拒否している理由はわかりません
- 23. Swiftが "Optional(455 bytes)"を印刷する理由
- 24. UnhandledPromiseRejectionWarning:未処理の約束拒否(拒否ID:1):UnhandledPromiseRejectionWarning:未処理の約束拒否(拒否ID:1):このコードを実行するときに3
- 25. std :: tuple_elementと参照
- 26. おそらく未処理の拒否拒否し、$ qを
- 27. Perlでtypeglobsを参照として使用できる理由
- 28. std :: optionalと "unused/default"の値の使用
- 29. 1つ以外のすべてのドメインからの参照を拒否する
- 30. 未定義の参照先、理由
をそれはoptional'がどのように動作するか 'はありません@Someprogrammerdude。それ以外の場合は、オプションのを使用することもできません。参照型をサポートするオプションの型を書くことができます。ブーストはそうです。標準では(operator = 'のために)選択しないだけです。 –
Barry
参照のポイントはほとんどありません。オプションではありません。 – jthill
'std :: optional>' :-D –