Описание первого - это правильное описание второго.Правильное описание первого очень похоже, вам просто нужно добавить шаг «копировать текущее значение m1» перед остальными.
Но у вас здесь явно не хватает точек последовательности, если m1
имеетпримитивный тип.Правила несколько меняются между C ++ 03 и C ++ 11.
Если m1
имеет определенный пользователем тип, то задействуются вызовы функций, которые влияют на последовательность.
Этот код
offSpring1[m1++] = temp1;
выполняет следующее (если m1
является примитивным типом):
auto const old_m1(m1);
auto const new_m1(old_m1 + 1);
auto& lhs(offSpring[old_m1]);
parallel { lhs = temp1; m1 = new_m1; }
Этот код
offSpring1[++m1] = temp1;
точно такой жеза исключением того, что lhs
связан с использованием new_m1
вместо old_m1
.
. В любом случае не определено, записано ли lhs
до или после m1
.
Если m1
не является примитивным типом, он выглядит примерно так:
auto const& index = m1.operator++(0); // one argument
auto& lhs = offSpring.operator[](index);
lhs = temp1;
против
auto const& index = m1.operator++(); // no arguments
auto& lhs = offSpring.operator[](index);
lhs = temp1;
В обоих этих случаях изменение на m1
определенно выполняется допишите lhs
.