2016-11-23 5 views
0
私が知っている

は、その配列要素が連続して格納されているが、何が、私はこのような何かを宣言した場合:メンバーは連続構造体内で変数が連続して宣言されていますか?確かに

class A { 
    public: 
    int a, b, c; 
    // or 
    int a; 
    int b; 
    int c; 
} 

を格納していますか?私は変数が別のプロセスからのabの宣言の間に格納されている可能性があるので、それは連続していないと考えています。確信はないけど。保証はありますか?

+0

FYI:http://stackoverflow.com/questions/4178175/what-are-aggregates-and-pods-and-how-why-are -they-special –

+0

FYI:http://stackoverflow.com/a/15248697 – Jonas

+0

Woop大丈夫、私はリンクの重複した感謝としてマークします。 @ n.m。私はそれをテストし、住所は連続しているので、私はちょっと混乱していると思います。 – Greffin28

答えて

2

abおよびcは、構造体内でこの順番になることが保証されています。

しかし、一般に、任意の2つの構造体メンバーの間に構造体パディングが存在する可能性があります。通常は、intのメンバーしか含まれていない構造体のためのパディングはありませんが、その前提をしないとよいでしょう。

あなたは、コンパイル時にこれを確認できます。

static_assert(sizeof(A) == 3 * sizeof(int), "oops, A had padding"); 
+0

遅く返事を申し訳ありません。とにかくありがとう、私はそのようにそれを使用しないようにしようとします。 – Greffin28

関連する問題