2017-09-06 6 views
1

はのは、私は、構造体を定義しましょう:sizeof(int)の2倍の大きさを保証する2つのint(および2つのintのみ)を含む構造体はありますか?

struct intpair 
{ 
    int i1; 
    int i2; 
    /*Other non-virtual members can go here*/ 
}; 

2*sizeof(int)するのC++標準で保証sizeof(intpair)ですか?保証されていない場合は、これが成立しないコンパイラや状況がありますか?

+0

まあまあまあまあのコンパイラには当てはまるでしょう。確かに 'static_assert'を置くことができます。 – HolyBlackCat

+4

関連性が高い:https://stackoverflow.com/questions/46037465/is-there-any-environment-where-would-cause-struct-padding#46037465 – Rakete1111

+1

@ Rakete1111は重複しているようだ – Brian

答えて

5

通常、そのサイズになります。しかし、確認するために、static_assertを追加します。

static_assert(sizeof(intpair) == sizeof(int) * 2, "Unexpected struct size"); 

アサートがこれまでに発射した場合、あなたは解決策を探して、あなたの頭を傷つけることができます。さもなければ、あなたは大丈夫でしょう。 (なぜこのbtwが必要なのですか?)

+0

パディングはどうですか?コンパイラはメンバー間にパディングを挿入できます。これによりsize> = 2 * sizeof(int)になります。 –

関連する問題