Список инициализаторов * аргумент * порядок оценки

Таким образом, стандарт 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 в объявлении это не слишком большая сделка, но иногда могут быть большие объекты и вещи, требующие динамического выделения.

Ответы на вопрос(1)

Ваш ответ на вопрос