問題タブ [standard-layout]

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 に答える
947 参照

c++ - ユニオンのメンバーにはユーザー定義のコンストラクターがあります

次のコードの場合:

これは C++ では完全に合法だと思います。http://en.cppreference.com/w/cpp/language/union#Explanation言います:

2 つの共用体メンバーが標準レイアウト型である場合、任意のコンパイラで共通のサブシーケンスを調べることが明確に定義されています

したがって、gccでこれを行うことができます

Visual Studio 2008 でこれを試すと、次のエラーが表示されます。

エラー C2620: のメンバーBar::fBarに、union Barユーザー定義のコンストラクターまたは重要な既定のコンストラクターがあります

エラー C2620は次のように述べています。

ユニオン メンバーは、既定のコンストラクターを持つことはできません。

何が起きてる?これは C++ の要件だったのですか? Standard Layout が唯一の要件だと思いましたか? これに対する回避策はありますか?

0 投票する
3 に答える
10931 参照

c++ - Union メンバーのデストラクタが呼び出されているか

C++11 では、標準のレイアウト タイプを使用できるようになりましたunion共用体のメンバーにはユーザー定義のコンストラクターがあります

私の質問は次のとおりunionです。範囲外になったときにカスタムデストラクタが呼び出されることは保証されていますか?

私の理解では、切り替え時に手動で破棄および構築する必要があります: http://en.cppreference.com/w/cpp/language/union#Explanation

しかし、次のような例はどうでしょうか。

範囲外になった場合、のデストラクタsを呼び出していないため、ヒープに割り当てられた文字列のメモリ リークが発生したのでしょうか。string

0 投票する
2 に答える
352 参照

c++ - 「ブラック ボックス」タイプの標準レイアウト保証の目的は何ですか?

C++ 標準では、mutex、atomics、または conditinal_variable が標準レイアウト タイプであることを指定しています。

この仕様の利点は何ですか? ユーザーはこのプロパティをどのように活用できますか?

一般に、実装の詳細を知らなくても型が標準レイアウトであることを知っている場合、何が得られるでしょうか?

0 投票する
0 に答える
124 参照

c++11 - c++11 での POD 型と継承: 継承と拡張ができないのに、POD 型のままでいられるのはなぜですか

これは例で説明するのが一番だと思います:

出力:

Cstandard_layout として認定されないのはなぜですか。予想通り、 と同じメモリ レイアウトを持っていますB。何が異なる可能性がありますか?