2

C++ 標準は、配列について少し簡潔に見えます。

と の 2 つの異なるデータ型があるT1としT2ます。それぞれの配列を作成します。両方の配列は同じ長さNです。だから私はT1[N]とを持っていT2[N]ます。

さて、sizeof(T1[N]) == sizeof(T2[N])両方の配列の連続する要素が同じオフセットを持つことを意味しますか?

または、より実用的な形式で: (アライメントの問題を処理して) toと toのchar[sizeof(T1[N])]両方をキャストした場合、 andがオーバーラップしないことが保証されますか?T1*T2*T1[0]T2[1]

4

1 に答える 1

4

はい。

配列の末尾にはパディングやアラインメントがないため、sizeof(T1[N])常に等しいですsizeof(T1) * N

これを知っていると、それがsizeof(T1[N]) == sizeof(T2[N])意味することがわかります(両側でsizeof(T1) == sizeof(T2)キャンセルします)。Nさらに、配列は連続している必要があり、配列内にアラインメントやパディングはありません。したがって、あなたの質問に対する答えはイエスです。

于 2012-08-18T09:51:01.433 に答える