問題タブ [std-variant]
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 ライブラリが元の変数自身のアドレスを取得できないようです。したがって、リンクされたリストをループしようとするたびに、マザー リスト内の要素のすべてのアドレスが変更されます。したがって、私は表示することしかできず、マザー リンク リスト内のそれらのリンク リストをプッシュバックすることはできません。私の友人の 1 人が、C++ はすべてポインターに関するものであり、Java にはポインターがあるため Java が嫌いだと言いました。そして今、このライブラリでは C++ でポインターを使用できません。この問題は、boot:: バリアント、std:: オプション、またはポリモーフィズムによって解決できると聞いています。しかし、これらがどのように機能するのかわかりません。とにかく、このライブラリがアドレスのアイデアに触れていない理由は、どの割り当てがどのように行われるかについて意見が分かれているからだと言う人もいます。
c++ - std::optional はどのように「例外により無価値」になることはありませんか?
std::variant
「例外による無価値」と呼ばれる状態に入ることができます。
私が理解しているように、これの一般的な原因は、移動割り当てが例外をスローした場合です。バリアントの古い値が存在することは保証されておらず、意図した新しい値も存在しません。
std::optional
ただし、そのような状態はありません。cppreference は大胆な主張をしています:
例外がスローされた場合、*this ... の初期化状態は変更されません。つまり、オブジェクトに値が含まれていた場合は、まだ値が含まれており、その逆も同様です。
std::optional
「例外による無価値」になることをどのように回避できstd::variant
ますか?