問題タブ [boost-optional]
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::experimental オプションの割り当ての違い
通常、関数が返されるとき、boost::optional
多くの人が空のブレースを返して空の値を指定するのを見てきました。これは正常に機能し、 を返す{}
よりも短くなりboost::none
ます。
空の a に似たようなことをしようとしましたboost::optional<int>
が、右側に空のブレースを付けてコピー代入演算子 (またはおそらくムーブ代入 op) を呼び出すと、空のブレースが int に変換され、その値がに割り当てられますオプションなので、期待していたように空の値ではなく、変数が 0 に設定されます。ここに例があります https://godbolt.org/g/HiF92v、同じことを試してみると、std::experimental::optional
期待どおりの結果が得られます(例で std::experimental::optional に置き換えるだけで、命令が表示されますになりますmov eax, eax
)。
また、boost オプション (非整数型) の別のテンプレート引数を試してみると、一部のコンパイラはコンパイルされます (私が期待している動作で、ここの例http://cpp.sh/5j7n )。他のコンパイラはコンパイルしません。したがって、同じライブラリでも、テンプレートの引数によって動作が異なります。
ここで何が起こっているのかを理解したいのですが、それが設計に考慮されていないライブラリに C++14 機能を使用しているという事実と関係があることはわかっています。ヘッダーを読みましたboost/optional
が、詳細に迷いました。また、コンパイルされたコードをインライン化せずに調査しようとしましたが、同様の結果が得られました。
-std=c++14 およびブースト 1.57 で gcc 4.9.2 を使用しています。
ところで: boost::optional::reset
orを使用する必要がboost::none
あることはわかっていましたが、残りのコード ベースのセマンティクスと一致するように努めていました。
c++ - オプションでできます8 バイト オブジェクトとして実装されますか?
std::optional を実装sizeof(std::optional<double>) == 8
して、NAN に文字を格納できるようにすることは可能ですか? http://en.cppreference.com/w/cpp/numeric/math/nanを参照してください。それを行う実装はありますか?標準で利用可能な機能の観点からそれを行うことはできますか?
c++ - クラス内のオプションの定数参照の初期化
A と B の 2 つのクラスがあります。クラス A は、指定されたベクトルに対して変換を実行する変換 (行列) です。
クラス B には 2 つのメンバーがあります。std::vector<double> &vec
ベクトルの参照、およびconst std::vector<std::shared_ptr<A> > &a_ptrs
クラス A の共有ポインタを含む別のベクトルの定数参照であり、異なる変換を表します。a_ptrs
ゼロ、1 つ、または複数の変換を含めることができます。クラス B の仕事の 1 つは、これらの (もしあれば) 変換を vector に適用することvec
です。
この目的のために、ご覧のとおり、クラス B のコンストラクターをオーバーロードしました。const std::vector<std::shared_ptr<A> > &a_ptrs
が引数として B のコンストラクターに渡されると、すべて問題ありません。a_ptrs
しかし、私の問題は、利用可能な変換が 0 または 1 つしかない場合、つまり、それぞれ空であるか要素が 1 つしかない場合に、この定数参照を初期化する方法がわからないことです。
要素が 1 つしかない場合は、 を渡すだけで、それに基づいて何らかの 方法で初期化a_ptrs
できるようにしたいと考えています。const std::shared_ptr<A> &aptr
a_ptrs
また、クラス B のクラス A への共有ポインターのコピーを作成したくありません。共有ポインターへの定数参照も必要です。
インターネットで見つけたものに基づいて、boost::optional
またはを使用する可能性がありますが、std::experimental::optional
機能させることができませんでした。
私は c++ の初心者で、この問題に 2 日間取り組んできましたが、うまくいきませんでした。どうすればこの問題を克服できますか? 別の設計戦略を立てる必要がありますか? この問題の解決に役立つコメントや提案をいただければ幸いです。
c++ - Android Studio でネイティブ デバッグ中に boost::optional コンテンツを表示する
2.3.3スタジオでのみ試しました。新しい 3.0 を試していない
- 役立つプラグインが見つかりませんでした
- lldb コンソールでキャストしようとしました。そこにいくつかのエラーがあり、それを適切に行う方法がわからない
それで、解決策はありますか?そのような問題にどのように対処しますか?
c++ - c ++のオプションの参照はオブジェクトの寿命を維持しますか?
私が持っているとしましょう:
realCat
上記では、一貫した結果が出力されることを期待する理由はありませ}
ん。それともoptional
の寿命を維持しrealCat
ますか?