0

C(gccを使用)では、いくつかの追加情報を含む配列であるデータ構造がいくつかありました。

struct song {
    uint tempo;
    uint key;
    note play[0]; // or play[] depending on compiler flavour
};

Iirc、これは「柔軟な配列」と呼ばれます(http://gcc.gnu.org/onlinedocs/gcc/Zero-Length.html#Zero-Lengthmalloc(sizeof(song)+N*sizeof(note)) )次に、実行時にN音の曲を割り当てることができます。今回ベクターを使用するつもりがない場合、または役に立たないnote*ポインターを導入するつもりがない場合、それはg ++でどの程度サポートされsongますか?

4

2 に答える 2

4

Cでも、これは未定義で移植性がありません。GCCは故意にそれを回避することができますが、他の実装ではできない場合があります。これは、境界を超えて配列にアクセスしているためです。

この「トリック」は、Cと同じようにC++でも有効です。つまり、GCCのドキュメントでサポートされていると記載されているGCCで自由に使用できますが、「明確に定義された有効なC++」になることはありません。

于 2013-02-17T13:21:11.533 に答える
-1

コンパイラはsong-structの長さを認識している必要があり、すべてのstructの長さが同じであるため、固定長またはメモ*を使用する以外に方法はありません。

したがって、メモ*またはベクトルを使用する必要があります

于 2013-02-17T13:13:00.447 に答える