問題タブ [flexible-array-member]
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++ - 柔軟な配列を匿名構造体にラップすると、MSVC構造体レイアウトが変更されますか?
Godbolt を使用して、次の構造体のレイアウト情報を見ています。
両方の構造体のレイアウトが同じであるFoo1
と予想していFoo2
ました。私が理解していることから、匿名のネストされた構造体のフィールドは、単に親構造体に「折りたたまれ」ます。したがって、 のレイアウトは のレイアウトとFoo2
同じになるはずですFoo1
。
ただし、MSVC 19.16 によって生成され、フラグを使用したときに表示されるレイアウトは/d1reportSingleClassLayoutFoo
異なります。
Foo2
の倍の大きさですFoo1
。そしてdata
突然、1バイトのサイズがあるようです。
で生成されるいくつかの警告があります-Wall
:
しかし、これらのいずれも、レイアウトの違いを説明したり、未定義の動作を示唆したりするようには見えません。そして、ドキュメント: Anonymous structsもそうではありません。
記録として、このコードが MSVC 拡張機能に依存していることは知っています。
「サイズがゼロの配列」は、フィールドの前に配置するとエラーがスローdata
されるため、柔軟な配列メンバーのようです。size
Foo1
とのレイアウトがFoo2
異なるのはなぜですか?