Почему a = (a + b) - (b = a) плохой выбор для замены двух целых чисел?
Я наткнулся на этот код для замены двух целых чисел без использования временной переменной или использования побитовых операторов.
int main(){
int a=2,b=3;
printf("a=%d,b=%d",a,b);
a=(a+b)-(b=a);
printf("\na=%d,b=%d",a,b);
return 0;
}
Но я думаю, что этот код имеет неопределенное поведение в операторе подкачкиa = (a+b) - (b=a);
так как не содержитпоследовательность точек определить порядок оценки.
Мой вопрос:Является ли это приемлемым решением для замены двух целых чисел?