Список инициализаторов * аргумент * порядок оценки
Таким образом, стандарт C ++ требует, чтобы члены класса были инициализированы в порядке, в котором они объявлены в классе, а не в порядке, в котором они 'упоминается в любом конструктореСписок инициализаторов. Тем не менее, это неt подразумевает что-либо о порядке, в котором оцениваются аргументы этих инициализаций. Я'я работаю с системой, которая часто передает ссылки на объекты сериализации, и задаюсь вопросом, могу ли я обеспечить, чтобы биты считывались из нее в правильном порядке, независимо от порядка, в котором эти биты записываются в объект »поля
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
в объявлении это не слишком большая сделка, но иногда могут быть большие объекты и вещи, требующие динамического выделения.