そのため、C++ 標準では、コンストラクターの初期化子リストに記載されている順序ではなく、クラスで宣言されている順序でクラス メンバーを初期化する必要があります。ただし、これは、これらの初期化への引数が評価される順序については何も意味しません。シリアル化オブジェクトへの参照を頻繁に渡すシステムで作業しており、オブジェクトのフィールドにビットが書き込まれる順序とは無関係に、ビットが正しい順序で読み取られるようにできるかどうか疑問に思っています。
struct Foo {
int a;
double b;
// I want to be able to do this
Foo(SerObj &s)
: b(s.readDouble()), a(s.readInt())
{ }
// Rather than this
Foo (SerObj &s)
{
b = s.readDouble();
a = s.readInt();
}
};
ints
明らかに、宣言内のやのようなものを並べ替えるdoubles
のはそれほど大したことではありませんが、より大きなオブジェクトや動的割り当てを必要とするものは、場合によってはそうなる場合があります。