問題タブ [unions]
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++ - C/C++ の共用体のサイズ
C/C++ の共用体のサイズは? その中の最大のデータ型のサイズですか?もしそうなら、共用体のより小さいデータ型の 1 つがアクティブな場合、コンパイラはどのようにスタック ポインタを移動するかを計算しますか?
c# - Cユニオンと同等のC#
C#でのC++ユニオンの複製
C共用体typedefと同等のC#はありますか?C#で次のものに相当するものは何ですか?
c++ - ユニオンの内部メンバーにアクセスするにはどうすればよいですか?
次のように定義された共用体があります。
コードから INTERNAL_STRUCTURE のメンバーにアクセスするにはどうすればよいですか?
私はこれを行うことができると思っていました:
私が間違っている。ユニオンで列挙型を確認できますが、他には何もありません。誰かがこのタイプの構造 (または利点) を説明してくれませんか?
c++ - ユニオン - 役立たずの時代錯誤か、それとも便利な昔ながらのトリックか?
私は最近、地元の図書館でわずか 2 ドルで販売されていた、優れたデータ構造の本、" Data Structures Using C " (c) 1991 を見つけました。本のタイトルが示すように、この本は C プログラミング言語を使用したデータ構造をカバーしています。
時代遅れであることはわかっていましたが、他の場所では見られないような高度な C トピックが多数含まれていることを知って、この本を入手しました。
案の定、5 分以内に C について知らなかったことがわかりました。union
キーワードについて説明しているセクションに出くわし、それを使用したことがなく、使用するコードを見たことがないことに気付きました。面白いことを学べたことに感謝し、すぐにその本を買いました。
労働組合とは何かをよく知らない人のために、この本は良い比喩を使って説明しています。
ユニオンの概念を完全に理解するには、その実装を検討する必要があります。構造は、メモリ領域へのロード マップと見なすことができます。メモリの解釈方法を定義します。ユニオンは、メモリの同じ領域に対していくつかの異なるロード マップを提供します。どのロード マップが現在使用されているかを判断するのは、プログラマの責任です。実際には、コンパイラは共用体の最大メンバーを格納するのに十分なストレージを割り当てます。ただし、そのストレージをどのように解釈するかを決定するのはロード マップです。
ユニオンを使用する不自然な状況やハックを簡単に思いつくことができました。(しかし、不自然な状況やハックには興味がありません...)
Union を使用すると、Union を使用しない場合よりも**よりエレガントに**問題を解決する実装を使用したり、見たりしたことがありますか?
ユニオンを使用した方がユニオンを使用しないよりも優れている/簡単である理由の簡単な説明を含めると、ボーナスが追加されます。
c - ユニオン要素の配置
共用体がある場合、C 標準では、共用体自体が最大要素のサイズに揃えられることが保証されます。
しかし、ユニオン内の個々のユニオン要素の整列については何を言っているのでしょうか? 次の式は真であることが保証されていますか?
c - ユニオンと構造体のパッキングの問題
各ビットが正確でなければならないソフトウェアを書いているので(CPU用です)、__packedは非常に重要です。
それが私の構造と結合です。ただし、機能しません。
同じ uint32 を作成する必要があります。しかし、それらは同じものを作成しません。
私の組合に問題がある、見えない何かがありますか?
c++ - MSVC: インライン フレンド演算子を使用したユニオンとクラス/構造体の比較
このコードは、GCC 3.x および 4.x で期待どおりにコンパイルおよび実行されます。
ただし、MSVC はそのコードをコンパイルしません。
正しいコンパイラはどれですか? これはどのように解決できますか?移植性、柔軟性、および自己文書化コードを維持しながら、クリーンなコード (外部のフレンド メソッドなし) を実現しようとしています。
いくつかのメモ:
- これは問題を示すためのテスト ケースです。MSVC では動作しませんが、元のデータ型ははるかに洗練され、慎重に設計されています (メイン コンパイラは GCC ですが、MSVC との互換性も必要です)。
- ユニオン宣言の先頭に「public:」を追加しても解決されません。
- 各オペレーターが解決しない前に「public:」を追加する
- テストケースを構造体/クラスに変換すると修正されますが、これは望ましくありません (炎上しないでください。理由があります。それらのほとんどは C++ 言語の制限です)。
- 演算子メソッドはグローバル スコープのままにする必要があります(メンバー関数ではありません)。
最適な解決策は、審美的な理由 (演算子とオペランドの 24 以上の異なる組み合わせ) のために、宣言を共用体定義の外に移動することに依存しませんが、他に解決策がない場合は実行されます。
c# - C#でC ++ユニオンをシミュレートするにはどうすればよいですか?
LayoutKind.Explicit
属性が設定された構造について少し質問があります。struct
ご覧のfieldTotal
とおり、64ビットでfieldFirst
最初の32バイトとfieldSecond
最後の32バイトを宣言しました。との両方fieldfirst
を設定fieldSecond
した後Int32.MaxValue
、私はになると期待fieldTotal
しますがInt64.MaxValue
、実際には起こりません。どうしてこれなの?C#は実際にはC ++共用体をサポートしていないことを知っています。おそらく、相互運用時に値を適切に読み取るだけですが、自分で値を設定しようとすると、実際にはうまく処理されません。
c# - (.net).net明示的構造体とc ++共用体の間に本質的な違いはありますか?
それが問題です。C#の明示的な構造体ではできない、c ++ユニオンでできることはありますか?