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

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

c++ - 柔軟な配列を匿名構造体にラップすると、MSVC構造体レイアウトが変更されますか?

Godbolt を使用して、次の構造体のレイアウト情報を見ています。

両方の構造体のレイアウトが同じであるFoo1と予想していFoo2ました。私が理解していることから、匿名のネストされた構造体のフィールドは、単に親構造体に「折りたたまれ」ます。したがって、 のレイアウトは のレイアウトとFoo2同じになるはずですFoo1

ただし、MSVC 19.16 によって生成され、フラグを使用したときに表示されるレイアウトは/d1reportSingleClassLayoutFoo異なります。

Foo2の倍の大きさですFoo1。そしてdata突然、1バイトのサイズがあるようです。

で生成されるいくつかの警告があります-Wall:

しかし、これらのいずれも、レイアウトの違いを説明したり、未定義の動作を示唆したりするようには見えません。そして、ドキュメント: Anonymous structsもそうではありません。

記録として、このコードが MSVC 拡張機能に依存していることは知っています。

「サイズがゼロの配列」は、フィールドの前に配置するとエラーがスローdataされるため、柔軟な配列メンバーのようです。size

Foo1とのレイアウトがFoo2異なるのはなぜですか?