1

構造体がある場合

struct three
{
   char  a,b,c;
};

そして、コンパイラ プラグマを使用して sizeof three が 3 であることを確認します。これがあればvector<three> 、要素間にギャップが挿入されないことが保証されますか? 別名、 vec.data() 次のようにはなりません:

abc_abc_abc_abc_abc_ (_は空欄)

4

3 に答える 3

1

これは、「連続ストレージ」条件によって保証されます。それ以前の実装ではすでに一般的でしたが、C++03 で標準に追加されました。0 <= n < vec.size()、 、という趣旨の言葉を言います&vec[n] == &vec[0] + n

&vec[0]タイプがであるためT*、これは、連続する要素間のバイト数の差が に等しい場合にのみ有効sizeof(T)です。

于 2013-10-15T09:07:46.247 に答える