Вы переназначили *a
в первой строке, и он использует это новое значение во второй строке.Вам понадобится временное, чтобы избежать этого, например:
int origa = *a;
*a = abs(origa + *b);
*b = abs(origa - *b);
В качестве альтернативы, вы можете получить фантазию с tuple
s:
std::tie(*a, *b) = std::make_tuple(abs(*a + *b), abs(*a - *b));
, который просто вычисляет и упаковывает значениясначала, а затем распаковывает их после завершения чтения.