問題タブ [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.

0 投票する
1 に答える
4619 参照

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::resetorを使用する必要がboost::noneあることはわかっていましたが、残りのコード ベースのセマンティクスと一致するように努めていました。

0 投票する
4 に答える
404 参照

c++ - オプションでできます8 バイト オブジェクトとして実装されますか?

std::optional を実装sizeof(std::optional<double>) == 8して、NAN に文字を格納できるようにすることは可能ですか? http://en.cppreference.com/w/cpp/numeric/math/nanを参照してください。それを行う実装はありますか?標準で利用可能な機能の観点からそれを行うことはできますか?

0 投票する
1 に答える
666 参照

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> &aptra_ptrs

また、クラス B のクラス A への共有ポインターのコピーを作成したくありません。共有ポインターへの定数参照も必要です。

インターネットで見つけたものに基づいて、boost::optionalまたはを使用する可能性がありますが、std::experimental::optional機能させることができませんでした。

私は c++ の初心者で、この問題に 2 日間取り組んできましたが、うまくいきませんでした。どうすればこの問題を克服できますか? 別の設計戦略を立てる必要がありますか? この問題の解決に役立つコメントや提案をいただければ幸いです。

0 投票する
1 に答える
114 参照

c++ - Android Studio でネイティブ デバッグ中に boost::optional コンテンツを表示する

2.3.3スタジオでのみ試しました。新しい 3.0 を試していない

  • 役立つプラグインが見つかりませんでした
  • lldb コンソールでキャストしようとしました。そこにいくつかのエラーがあり、それを適切に行う方法がわからない

それで、解決策はありますか?そのような問題にどのように対処しますか?

0 投票する
1 に答える
467 参照

c++ - c ++のオプションの参照はオブジェクトの寿命を維持しますか?

私が持っているとしましょう:

realCat上記では、一貫した結果が出力されることを期待する理由はありませ}ん。それともoptionalの寿命を維持しrealCatますか?